매번 반복되는 워드 문서 작성, 파이썬으로 자동 생성하기
매번 반복되는 워드 문서 작성, 파이썬으로 자동 생성하기 (완성 코드 공개)
"A사 견적서, B사 견적서, C사 견적서…"
거래처마다 이름과 금액만 다를 뿐 양식은 똑같은 문서를 매번 복사해서 수정하고 있지는 않으신가요? 회사명을 잘못 복사하거나, 금액 수정을 빠뜨리는 실수가 반드시 생깁니다. 파이썬을 한 번만 세팅해두면 엑셀에 거래처 정보를 입력하는 것만으로 워드 문서가 자동으로 생성됩니다.
1단계: 준비물 설치
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
워드 문서 생성에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install python-docx pandas openpyxl
python-docx는 워드(.docx) 파일을 생성하고 편집하는 라이브러리입니다. 제목, 본문, 표, 서식까지 모두 코드로 제어할 수 있습니다. pandas와 openpyxl은 엑셀에서 데이터를 읽어오는 데 사용합니다.
💡 이 코드로 할 수 있는 것: 엑셀 파일에 거래처별 정보(회사명, 담당자, 금액 등)를 입력해두면, 거래처마다 자동으로 개별 워드 파일을 생성합니다. 10개든 100개든 실행 한 번으로 처리됩니다.
2단계: 엑셀 파일 준비
코드를 실행하기 전에 엑셀 파일을 아래 형식으로 준비합니다. 1행은 반드시 헤더(열 이름)로, 2행부터 실제 데이터를 입력합니다.
A열(회사명) B열(담당자) C열(품목) D열(금액) ---------------------------------------------------------- A주식회사 홍길동 노트북 5대 3,500,000 B기술연구소 김철수 마우스 20개 400,000 C물산 이영희 모니터 3대 1,800,000
열 이름은 자유롭게 바꿀 수 있습니다. 코드에서 열 이름을 지정하기 때문에 원하는 항목을 추가해도 됩니다.
3단계: 완성 코드
아래 코드를 그대로 복사해서 메모장에 붙여넣고, make_word.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import pandas as pd
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from pathlib import Path
from datetime import datetime
# ① 설정: 파일 경로
EXCEL_PATH = r"C:\Users\내이름\Desktop\거래처목록.xlsx" # ← 본인 엑셀 경로
OUTPUT_DIR = r"C:\Users\내이름\Desktop\견적서모음" # ← 저장할 폴더 경로
# ② 출력 폴더 생성
output_dir = Path(OUTPUT_DIR)
output_dir.mkdir(exist_ok=True)
# ③ 엑셀 읽기
df = pd.read_excel(EXCEL_PATH, engine="openpyxl")
print(f" ✔ 데이터 로드 완료: {len(df)}건")
# ④ 거래처별 워드 파일 생성
created = 0
for _, row in df.iterrows():
doc = Document()
# 제목
title = doc.add_heading("견 적 서", level=1)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 발행일
date_para = doc.add_paragraph(f"발행일: {datetime.now().strftime('%Y년 %m월 %d일')}")
date_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT
doc.add_paragraph() # 빈 줄
# 수신 정보
doc.add_paragraph(f"수 신: {row['회사명']} {row['담당자']} 님")
doc.add_paragraph("발 신: IT꿀팁 연구소")
doc.add_paragraph() # 빈 줄
# 품목 표
table = doc.add_table(rows=1, cols=3)
table.style = "Table Grid"
header_cells = table.rows[0].cells
header_cells[0].text = "품목"
header_cells[1].text = "금액"
header_cells[2].text = "비고"
# 헤더 굵게 처리
for cell in header_cells:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
# 데이터 행 추가
data_cells = table.add_row().cells
data_cells[0].text = str(row["품목"])
data_cells[1].text = f"{int(row['금액']):,}원"
data_cells[2].text = "부가세 별도"
# 합계 행
total_cells = table.add_row().cells
total_cells[0].text = "합 계"
total_cells[1].text = f"{int(row['금액']):,}원"
total_cells[2].text = ""
doc.add_paragraph() # 빈 줄
doc.add_paragraph("위와 같이 견적서를 제출합니다. 검토 후 연락 부탁드립니다.")
# ⑤ 파일 저장 (회사명으로 파일명 지정)
filename = f"견적서_{row['회사명']}.docx"
doc.save(output_dir / filename)
print(f" ✔ 생성 완료: {filename}")
created += 1
print(f"\n✅ 완료! 총 {created}개 워드 파일 생성 → {OUTPUT_DIR}")
4단계: 실행 방법
- 엑셀 파일을 준비하고 코드 ① 설정의
EXCEL_PATH에 파일 경로를 입력합니다. OUTPUT_DIR에 워드 파일을 저장할 폴더 경로를 입력합니다. 폴더가 없으면 자동으로 생성됩니다.- 엑셀의 열 이름이 코드와 다르다면
row['회사명'],row['담당자']등을 본인 엑셀의 열 이름으로 수정합니다. - 터미널에서 아래 명령어로 실행합니다:
python make_word.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ 데이터 로드 완료: 3건 ✔ 생성 완료: 견적서_A주식회사.docx ✔ 생성 완료: 견적서_B기술연구소.docx ✔ 생성 완료: 견적서_C물산.docx ✅ 완료! 총 3개 워드 파일 생성 → C:\Users\내이름\Desktop\견적서모음
지정한 폴더 안에 거래처별 워드 파일이 자동으로 생성됩니다. 각 파일에는 회사명, 담당자, 품목, 금액이 자동으로 채워져 있고 표 서식까지 적용되어 있습니다.
5단계: 자주 발생하는 오류와 해결법
오류 1: ModuleNotFoundError: No module named 'docx'
설치 시 docx가 아닌 반드시 python-docx로 입력해야 합니다. 아래 명령어로 다시 설치하세요.
python -m pip install python-docx
오류 2: KeyError: '회사명'
코드의 row['회사명']에 입력한 열 이름이 엑셀 헤더와 정확히 일치하지 않을 때 발생합니다. 엑셀 1행의 열 이름을 다시 확인하고, 공백이나 오타가 없는지 점검하세요.
오류 3: 생성된 워드 파일의 한글이 깨짐
python-docx는 한글을 기본으로 지원합니다. 깨짐이 발생한다면 파일 저장 시 인코딩이 UTF-8로 설정되어 있는지 확인하세요. 메모장에서 저장할 때 인코딩을 UTF-8로 선택했는지 다시 확인합니다.
응용: 문서에 로고 이미지를 넣고 싶다면
회사 로고나 도장 이미지를 워드 문서에 자동으로 삽입할 수 있습니다. 제목 아래에 아래 코드를 추가하세요.
from docx.shared import Inches LOGO_PATH = r"C:\Users\내이름\Desktop\회사로고.png" # ← 로고 이미지 경로 logo_para = doc.add_paragraph() logo_para.alignment = WD_ALIGN_PARAGRAPH.CENTER run = logo_para.add_run() run.add_picture(LOGO_PATH, width=Inches(1.5)) # 너비 1.5인치로 삽입
💡 이전 게시글과 결합하면: 이메일 자동 발송 편의 코드와 결합하면, 거래처별 워드 파일을 생성한 직후 해당 담당자 이메일로 자동 발송하는 것도 가능합니다.
핵심 요약
- 준비물: Python + python-docx + pandas + openpyxl 설치
- 설정: 엑셀 파일 경로, 저장 폴더 경로, 열 이름만 수정
- 실행: 터미널에서 python make_word.py 입력
- 결과: 거래처별 워드 파일이 표 서식 포함 자동 생성, 파일명도 회사명으로 자동 지정
이 코드를 응용하면 보고서, 계약서, 안내문 등 어떤 양식의 문서도 자동으로 만들 수 있습니다.
