python-docx를 사용하여 docx 파일 다시 쓰기
소개
매주 작성이 필요한 주보를 자동 생성하기 위한 검토입니다.
조사한 결과, python-docx를 사용하면,
문자만 바꿀 수 있음을 알았습니다.
또, paragraph 마다 문자색을 바꿀 수 있는 것도 알았습니다.
이것이라면 갈 수 있을 것 같습니다.
paragraph.text = paragraph.text.replace("before","after")
paragraph.runs[0].font.color.rgb = RGBColor(204, 0, 0)
python_doc의 Document 구조
구조를 보면, paragraph는 Document 바로 아래에 있을 뿐만 아니라, tables 안에도 있는 것을 알 수 있고,
모든 paragraph의 text를 치환하기 위해서는, 각각의 pragraph를 치환할 필요가 있습니다.
Document 바로 아래의 paragraphdocument.paragraphs[0].text
tables의 paragraphdocument.tables[0].rows[0].cells[0].paragraphs[0].text
또, 문자색을 설정하는 경우는 runs[0]
를 사용합니다. 왜 [0]
가 붙는지는 모릅니다.paragraph.runs[0].font.color.rgb = RGBColor(204, 0, 0)
다시 쓰기 샘플 코드
paragraph
와 tables
밖에 재기록하고 있으므로,
그 외의 도형이나 헤더 푸터의 재기록도 필요하다면
추가 구현이 필요합니다.
from docx import Document
from docx.shared import RGBColor
from docx.enum.text import WD_COLOR_INDEX
def replace_text(paragraph):
replaced_text = paragraph.text.replace("before","after")
if paragraph.text != replaced_text:
paragraph.text = replaced_text
paragraph.runs[0].font.color.rgb = RGBColor(204, 0, 0)
paragraph.runs[0].font.highlight_color = WD_COLOR_INDEX.YELLOW
document = Document("original.docx")
for paragraph in document.paragraphs:
replace_text(paragraph)
paragraphs = (paragraph
for table in document.tables
for row in table.rows
for cell in row.cells
for paragraph in cell.paragraphs)
for paragraph in paragraphs:
replace_text(paragraph)
document.save("output_new.docx")
이상으로 교체 완료
참고
paragraph
와 tables
밖에 재기록하고 있으므로,그 외의 도형이나 헤더 푸터의 재기록도 필요하다면
추가 구현이 필요합니다.
from docx import Document
from docx.shared import RGBColor
from docx.enum.text import WD_COLOR_INDEX
def replace_text(paragraph):
replaced_text = paragraph.text.replace("before","after")
if paragraph.text != replaced_text:
paragraph.text = replaced_text
paragraph.runs[0].font.color.rgb = RGBColor(204, 0, 0)
paragraph.runs[0].font.highlight_color = WD_COLOR_INDEX.YELLOW
document = Document("original.docx")
for paragraph in document.paragraphs:
replace_text(paragraph)
paragraphs = (paragraph
for table in document.tables
for row in table.rows
for cell in row.cells
for paragraph in cell.paragraphs)
for paragraph in paragraphs:
replace_text(paragraph)
document.save("output_new.docx")
이상으로 교체 완료
참고
Reference
이 문제에 관하여(python-docx를 사용하여 docx 파일 다시 쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/butada/items/93ad2301348a4fe28b5c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)