openpyxl로 엑셀 데이터를 읽어와 워드 문서에 표와 텍스트 추가하기
보고서를 작성하다 보면, 엑셀 파일에서 데이터를 읽어와 이를 표와 텍스트로 작성해야 할 때가 있습니다.
이번 수업에서는 이전 Chapter에서 배운 openpyxl
라이브러리를 활용하여 엑셀 데이터를 읽어온 후, python-docx
를 사용해 워드 문서에 텍스트와 표를 추가하는 방법을 알아보겠습니다.
엑셀 파일 구조
먼저 이번 수업에서 다룰 엑셀 파일의 구조를 살펴보겠습니다.
엑셀 파일은 일자, 상품별 매출 데이터를 포함하고 있으며, 시트 내 데이터는 다음과 같습니다.
날짜 | 제품명 | 판매량 | 단가 | 총매출 |
---|---|---|---|---|
2024-01-01 | 상품 A | 100 | 500 | 50,000 |
2024-01-02 | 상품 B | 150 | 750 | 112,500 |
2024-01-03 | 상품 C | 200 | 800 | 160,000 |
2024-01-04 | 상품 A | 130 | 500 | 65,000 |
2024-01-05 | 상품 B | 170 | 750 | 127,500 |
이 엑셀 파일에는 각 제품의 일자별 판매량과 단가를 곱한 총매출이 계산되어 있습니다.
이러한 엑셀 파일 내 데이터를 워드 문서로 변환하여, 보고서에 한 번에 포함시키려면 어떻게 해야 할까요?
1. 엑셀 파일에서 데이터 읽어오기
먼저, 엑셀 파일에서 데이터를 읽어오기 위해 openpyxl 라이브러리를 사용합니다.
# 엑셀 파일 로드 workbook = load_workbook('input_file.xlsx') # 활성화된 시트 선택 sheet = workbook.active # 데이터 읽어오기 data = [] # min_row=2로 설정하여 첫 번째 행(헤더) 제외 for row in sheet.iter_rows(min_row=2, values_only=True): # 데이터가 있는 행만 추가 data.append(row)
-
load_workbook('input_file.xlsx')
은 'input_file.xlsx' 파일을 로드합니다. -
sheet = workbook.active
는 활성화된 시트를 선택합니다. -
iter_rows(min_row=2, values_only=True)
는 엑셀 시트의 데이터를 행 단위로 읽어옵니다. 여기서min_row=2
는 첫 번째 행(헤더)을 건너뛰고 두 번째 행부터 읽어오도록 설정합니다.
2. 워드 문서 생성하기
이제 가져온 데이터를 워드 문서에 넣어보겠습니다.
# 새 워드 문서 생성 doc = Document() # 제목 추가 doc.add_heading('매출 보고서', 0) # 문단 추가 doc.add_paragraph('다음은 최근 매출 데이터입니다.')
-
Document()
를 호출하여 새 워드 문서를 생성합니다. -
add_heading('매출 보고서', 0)
은 문서의 제목을 추가합니다. -
add_paragraph('다음은 최근 매출 데이터입니다.')
는 본문 텍스트를 추가합니다.
3. 엑셀 데이터를 워드 문서에 표로 추가하기
먼저, 표의 헤더를 아래와 같이 추가합니다.
# 표 생성 table = doc.add_table(rows=1, cols=len(sheet[1]), style='Table Grid') # 표의 첫 번째 행에 헤더 추가 hdr_cells = table.rows[0].cells # 엑셀의 첫 번째 행(헤더)를 표의 첫 번째 행에 추가 for i, heading in enumerate(sheet[1]): # 헤더 셀에 텍스트 추가 hdr_cells[i].text = str(heading.value)
-
doc.add_table(rows=1, cols=len(sheet[1]), style='Table Grid')
는 엑셀 데이터의 열 개수만큼 컬럼이 있는 표를 생성합니다. -
table.rows[0].cells
는 표의 첫 번째 행에 헤더를 추가합니다. -
for i, heading in enumerate(sheet[1])
는 엑셀의 첫 번째 행(헤더)를 표의 첫 번째 행에 추가합니다. -
hdr_cells[i].text = str(heading.value)
는 헤더 셀에 텍스트를 추가합니다.
이후 표의 각 행에 데이터를 추가합니다.
# 표에 데이터 추가 for row in data: # 표에 새 행 추가 row_cells = table.add_row().cells # 각 행의 데이터를 표에 추가 for i, value in enumerate(row): # 각 셀에 데이터 추가 row_cells[i].text = str(value)
4단계: 문서 저장하기
모든 데이터를 추가한 후, 워드 문서를 저장합니다.
# 문서 저장 doc.save('output_file.docx')
이 코드는 작성된 문서를 'output_file.docx'라는 이름으로 저장합니다.
python-docx에서 문서의 제목을 추가하는 메서드는 무엇인가요?
add_paragraph
add_heading
add_title
add_text
가이드라인
AI 튜터
배포
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
실행 결과
문서가 비어 있습니다.
코드를 실행해보세요.