본문으로 건너뛰기
실습하기

openpyxl로 엑셀 데이터를 읽어와 워드 문서에 표와 텍스트 추가하기

보고서를 작성하다 보면, 엑셀 파일에서 데이터를 읽어와 이를 표와 텍스트로 작성해야 할 때가 있습니다.

이번 수업에서는 이전 Chapter에서 배운 openpyxl 라이브러리를 활용하여 엑셀 데이터를 읽어온 후, python-docx를 사용해 워드 문서에 텍스트와 표를 추가하는 방법을 알아보겠습니다.


엑셀 파일 구조

먼저 이번 수업에서 다룰 엑셀 파일의 구조를 살펴보겠습니다.

엑셀 파일은 일자, 상품별 매출 데이터를 포함하고 있으며, 시트 내 데이터는 다음과 같습니다.

날짜제품명판매량단가총매출
2024-01-01상품 A10050050,000
2024-01-02상품 B150750112,500
2024-01-03상품 C200800160,000
2024-01-04상품 A13050065,000
2024-01-05상품 B170750127,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'라는 이름으로 저장합니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!