프로그래밍 언어/Python

워드 문서에 표와 이미지 삽입하기

· 코딩마이데이

이제 워드 문서에 표와 이미지를 삽입하는 코드를 만듭니다. add_table() 함수를 정의하여, 데이터 수집, 표 생성 및 이미지 삽입까지 모든 한 번에 처리할 수 있게 만들겠습니다.

비주얼 스튜디오 코드에서 새로운 파일을 생성하고, 파일명을 'step_3_2.py'로 변경하세요. 다음과 같이 코드를 입력하고, 실행 아이콘을 클릭하세요. 'output' 폴더에 'step_3_3.docx' 파일이 생성됩니다.

 

ch06/step_3_2.py

import json
from pathlib import Path
from docx.document import Document as DocumentObject # Document 객체
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 단락 정렬 방법
from docx.shared import Cm # 크기 설정 클래스(센티미터)
from step_1_1 import OUT_DIR # 'output' 폴더 경로
from step_2_2 import OUT_2_2 # 이미지 경로
from step_2_3 import fetch_trends_by_filter # 데이터 수집 함수
from step_3_1 import apply_font_style, init_docx

def add_table(doc: DocumentObject, category: str, option: str): # 11
    fetch_trends_by_filter(category, option) # 쇼핑 트랜드 수집
    imgs_path: list = json.loads(OUT_2_2.read_text(encoding="utf8")) # 13
    n_items = len(imgs_path) # 이미지 개수 # 14
    n_cols = 5 # 열 개수 # 14
    n_rows = n_items // n_cols + (1 if n_items % n_cols > 0 else 0) # 행 개수 # 16

    para = doc.add_paragraph(style="Heading 2") # 표 제목
    text_filter = f"{option}의 {category} 트렌드"
    apply_font_style(para.add_run(text_filter), size_pt=15, is_bold=True)

    table = doc.add_table(rows=n_rows, cols=n_cols, style="Table Grid") # 표 생성 # 22
    for tr in table.rows: # 행 반복 처리 # 23
        for td in tr.cells: # 열 반복 처리 # 24
            if len(imgs_path) > 0: # 처리할 경로가 남아있는 경우 # 25
                img_path = imgs_path.pop(0) # 첫 번째 위치의 경로 추출 # 26
                p_cell = td.paragraphs[0] # 현재 셀의 기본 Paragraph 객체 선택 # 27
                p_cell.add_run().add_picture(img_path, width=Cm(3)) # 28
                p_cell.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 단략 정렬
            
    doc.add_paragraph("") # 빈 단락 추가
    p_list = doc.add_paragraph(style="List Bullet") # 목록 서식 적용한 단락 추가 # 32
    text_notice = '보다 자세한 정보는 네이버플러스 스토어에서 확인하세요.'
    apply_font_style(p_list.add_run(text_notice), size_pt=9)


if __name__ == "__main__":
    doc = init_docx() # 38
    add_table(doc, "패션의류", "10대 여성") # 표 추가
    doc.save(OUT_DIR / f"{Path(__file__).stem}.docx")

 

 

실행 결과

 

11 주어진 조건으로 쇼핑 트렌드 데이터를 수집하고, 표로 출력하는 함수 add_table()을 정의합니다. 

13 이미지 경로가 저장된 JSON 파일을 불러와서 변수 imgs_path에 리스트 형식으로 저장합니다.

14~16 표의 행과 열의 개수를 계산합니다. 변수 n_items, n_cols, n_rows는 각각 이미지, 열, 행의 개수를 의미합니다.

18 함수 add_paragraph()를 사용하여 표 제목울 작성합니다.

22 함수 add_table()를 이용해 Table 객체를 생성하고 변수 table 저장합니다. 매개변수 rows에 행의 개수, cols에 열의 개수, style에 표애 적용할 서식을 전달합니다. "Table Grid"는 표의 윤곽선을 실선으로 그리는 서식입니다.

23~25 Table 객체의 rows 속성을 사용하여 행별로, Row 객채의 cells 속성을 사용하여 열별로 표의 셀에 데이터를 입력합니다. imgs_path 변수에 표에 삽입해야 할 이미지가 남아 있는 경우 26~29행을 실행합니다.

26 함수 pop(0)을 사용하여  변수 imgs_path에 저장된  첫 번째 이미지 경로를 추출하고, img_path에 저장합니다.

27 Cell 객체의 셀에 자동으로 생성된 Paragraph 객체를 불러 와서 변수 p_cell에 저장합니다.

28 함수 add_run()를 사용하여 Run 객체를 생성하고, 이어서 함수 add_imag()를 사용하여 이미지를 삽입합니다. 이 함수의 첫 번째 입력값으로 이미지 경로를, width에 이미지의 너비를 센티미터 단위로 입력합니다.

32 보고서에 안내 메시지를 추가합니다. 매개변수 style에 'List Bullet'를 전달하여 목록 서식을 적용합니다.

38 함수 add_table()를 실행하여 데이터 수집과 표 생성을 처리합니다.

 

파이썬에서 마이크로소프트 워드를 사용해 쇼핑 트렌드를 분석한 보고서를 작성했습니다.