프로그래밍 언어/Python

보고서 작성하기

· 코딩마이데이

python-docx 패키지의 기본 기능을 사용해 쇼핑 트랜드 보고서를 작성해 보겠습니다. python-docx 패키지는 매우 복잡한 레이아웃을 구현하기 어렵다는 한계가 있지만 마이크로소프트 워드 문서를 생성하고 텍스트, 이미지, 표 등 객체를 삽입하기에는 충분합니다.

 

워드 문서 작성하기

python-docx 패키지를 사용하여 쇼핑 트렌드 보고서를 워드 문서로 작성해 봅시다. 워드 문서를 만들고 보고서 제목을 입력한 후, 파일로 저장하는 순서로 작성할 것입니다.

비주얼 스튜디오 코드에서 새로운 파일을 만들고, 파일명을 'step_3_1.py'로 지정하세요. 다음 코드를 입력한 후, 대화형 창에서 실행하세요. 'output' 폴더에 'step_3_1.docx' 워드 문서가 생성됩니다. 이 문서를 열면 소스 코드에 입력한 폰트 서식이 제대로 적용된 것을 확인할 수 있습니다.

from datetime import datetime as dt
from pathlib import Path
from docx import Document # Document 함수 불러오기
from docx.document import Document as DocumentObject # Document 객체
from docx.shared import Pt # 포트 크기 설정 클래스(포안트 단위)
from docx.text.run import Run
from step_1_1 import OUT_DIR

def apply_font_style(run: Run, size_pt: int = None, is_bold: bool = None): # 09
    if size_pt:
        run.font.size = Pt(size_pt) # 폰트 크기 지정 # 11
    if is_bold is not None:
        run.font.bold = is_bold # 폰트 두께 설정 # 13
    
def init_docx() -> DocumentObject:
    doc = Document() # Document 객체 생성
    p1 = doc.add_paragraph(style="Heading 1") # Paragraph 객체 생성 # 17
    run1 = p1.add_run("쇼핑 트랜드 정보") # Run 객체 생성 # 18
    apply_font_style(run1, size_pt=25, is_bold=True) # 19
    date_string = dt.now().strftime("%Y.%m.%d") # 현재 날짜
    apply_font_style(p1.add_run(date_string), size_pt=15) # 21
    return doc # Document 객체 반환

if __name__ == "__main__":
    doc = init_docx()
    doc.save(OUT_DIR / f"{Path(__file__).stem}.docx") # 워드 문서 파일로 저장

 

 

09 폰트를 지정하는 함수 apply_font_style()를 정의합니다. 매개변수 run에 Run 객체를, size_pt애 폰트 크기를, is_bold에 폰트 굵기를 지정합니다.

11 변수 size_pt를 Pt 객체로 변환한 후, Run 객체의 font.size 속성에 저장하여 폰트 크기를 설정합니다.

13 변수 is_bold를 Run 객체의 font.bold 속성에 저장하여 폰트 두께를 설정합니다.

17 Document 객체의 함수 add_paragraph()를 사용하여 Paragraph 객체를 생성합니다. 이때 매개변수 style에 단락 서식을 지정할 수 있습니다.

18 함수 Paragraph 객체의 함수 add_run를 사용하여 Run 객체를 생성하고, 변수 run1에 저장합니다. 

19 함수 apply_font_style()를 호출하여 Run 객체의 폰트 크기를 25 포인트. 굵은 서식을 지정합니다.

21 함수 add_run()를 사용하여 Run 객체를 생성하고, 이를 함수 apply_font_style()의 입력값으로 전달하여 Run 객체를 생성과 폰트 서식 설정을 한 번에 처리합니다.