python-docx를 사용하여 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)


    다시 쓰기 샘플 코드


    paragraphtables 밖에 재기록하고 있으므로,
    그 외의 도형이나 헤더 푸터의 재기록도 필요하다면
    추가 구현이 필요합니다.
    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")
    

    이상으로 교체 완료

    참고


  • h tp // w w. 그리고 ny ba ty. 이 m / g 등 phs. HTML
  • https://www.robotech-note.com/entry/2018/05/13/Python%E3%81%A7word%2Cdocx%E3%83%95%E3%82%A1%E3%82%A4%E3% 83%AB%E3%81%AE%E4%B8%AD%E8%BA%AB%E3%82%92%E7%BD%AE%E6%8F%9B%E3%81%99%E3%82% 8B%EF%BC%88python-docx%EF%BC%89
  • 좋은 웹페이지 즐겨찾기