Guidelines

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'λΌλŠ” μ΄λ¦„μœΌλ‘œ μ €μž₯ν•©λ‹ˆλ‹€.

Mission
0 / 1

python-docxμ—μ„œ λ¬Έμ„œμ˜ 제λͺ©μ„ μΆ”κ°€ν•˜λŠ” λ©”μ„œλ“œλŠ” λ¬΄μ—‡μΈκ°€μš”?

add_paragraph

add_heading

add_title

add_text

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result

Input/Result

The document is empty.

Try running the code.