파이썬 워드 문서 자동 생성: 40대 N잡러가 관공서 방역 보고서 야근 끝낸 비결

실무 현장에 파이썬 워드 문서 자동 생성 기술을 본격적으로 도입하여 지긋지긋한 문서 편집 지옥에서 탈출하기 전까지, 저의 매월 마지막 주 일요일 밤은 언제나 워드 프로세서 창을 켜놓고 마우스로 표 테두리를 맞추며 한숨 쉬는 시간으로 채워져 있었습니다.

저는 평일 낮에는 회사에서 각종 기획서와 결재 서류를 검토하는 40대 직장인이자, 퇴근 후와 주말에는 해충 방역 및 소독 전문 업체인 ‘스마트방역’을 직접 운영하는 대표입니다. 낮에는 회사원으로, 밤과 주말에는 자영업 대표로 살아가는 N잡러에게 가장 부족한 것은 언제나 ‘시간’과 ‘체력’입니다.

무거운 소독 장비를 차에 싣고 안성시와 화성시 일대의 상가, 식당, 공공시설 수십 곳을 돌며 구슬땀을 흘리고 집으로 돌아오면 밤 9시가 훌쩍 넘습니다. 현관문을 열면 반갑게 꼬리를 흔들며 반겨주는 우리 집 블랙탄 시바견 ‘반달이’의 턱 밑과 미간을 쓰다듬어 주며 잠시 숨을 돌리고, 반달이의 단짝 친구인 리트리버 ‘럭키’와 함께 밤 산책을 다녀옵니다. 아들이 잠든 조용한 방에서 밤 10시 반이 되어 책상 스탠드를 켜면, 그때부터 육체노동보다 더 고된 두 번째 출근이 시작됩니다.

바로 한 달 동안 진행한 방역 내역을 정리해 안성시청을 비롯한 관공서와 주요 거래처에 제출해야 하는 ‘월간 방역 소독 결과 보고서’ 작성 업무입니다.

관공서나 중견 기업에 제출하는 완료 보고서는 단순히 엑셀 표 하나만 덜렁 보내서는 결재가 나지 않습니다. 정식 표지부터 시작해서 1장 추진 개요, 2장 권역별 방역 실적 요약표, 사용 약품의 환경부 승인 내역, 그리고 특이사항 코멘트까지 정해진 워드 문서 양식에 맞춰 반듯하게 제출해야 합니다.

매달 똑같은 구조의 보고서인데도, 지난달 워드 파일을 복사해 열어서 날짜를 고치고, 엑셀에 있는 숫자를 하나씩 복사해 워드 표에 붙여넣다 보면 표 모양이 틀어지고 글꼴 크기가 제각각으로 변하기 일쑤입니다. 침침한 눈을 비비며 마우스로 줄 간격을 맞추고 오타를 검수하다 보면 시계 바늘은 어느새 새벽 1시를 가리킵니다. “내가 방역 전문가인가, 심야 문서 타이피스트인가” 하는 뼈아픈 현타가 밀려오던 그날 밤, 저는 엑셀을 넘어 워드 문서까지 파이썬에게 통째로 맡기기로 결심했습니다.

판다스 엑셀을 넘어 파이썬 워드 문서 자동 생성이 필요한 순간

지금까지 제 블로그를 통해 판다스(Pandas)로 흩어진 엑셀 파일을 하나로 합치고, 오픈파이엑셀(openpyxl)로 깔끔한 테두리와 남색 배경 서식을 입히는 방법을 다루었습니다. 데이터 정리와 통계 작업에서는 엑셀이 단연 최고의 도구입니다.

하지만 대한민국 실무 현장의 최종 종착지는 언제나 ‘문서(Document)’입니다. 회사 임원진에게 올리는 주간 업무 보고서, 거래처에 보내는 공식 견적서 및 계약서, 그리고 제가 매달 관공서 주무관님께 제출하는 방역 완료 보고서처럼 서술형 문장과 요약 표가 함께 어우러져야 하는 양식은 마이크로소프트 워드(.docx) 형태를 요구합니다.

데이터는 이미 내 컴퓨터의 엑셀 대장 안에 완벽하게 정리되어 있습니다. 그렇다면 사람이 일일이 엑셀 창과 워드 창을 번갈아 클릭하며 Ctrl+C, Ctrl+V를 반복할 이유가 전혀 없습니다.

이 지루한 중간 다리 역할을 완벽하게 대신해 주는 파이썬의 핵심 도구가 바로 python-docx 라이브러리입니다. 내 컴퓨터에 설치된 워드 프로그램을 사람이 마우스로 조작하는 대신, 파이썬 코드가 보이지 않는 손이 되어 제목을 쓰고, 글씨 크기를 키우고, 표를 그려서 데이터를 채워 넣은 뒤 완성된 파일로 저장해 주는 원리입니다.

준비는 언제나처럼 간단합니다. VS Code의 하단 터미널 창을 열고 아래 설치 명령어 한 줄만 입력해 주시면 모든 채비가 끝납니다.

pip install python-docx

파이썬 워드 문서 자동 생성 코드를 VS Code 에디터에서 작성하고 있는 실제 화면
대체 텍스트: 파이썬 워드 문서 자동 생성 코드를 VS Code 에디터에서 작성하고 있는 실제 화면

40대 N잡러가 정착한 파이썬 워드 문서 자동 생성 실전 코드

설치가 끝났다면 이제 실제 실무에서 돌아가는 코드를 살펴볼 차례입니다. 아래 코드는 제가 매월 말일 밤, 안성시 관내 방역 실적을 바탕으로 관공서 제출용 공식 결과 보고서 워드 파일을 단 3초 만에 찍어낼 때 사용하는 현역 스크립트입니다.

보고서의 품격을 결정짓는 표지 제목부터 본문 대제목, 서술형 문단, 그리고 3행 3열짜리 요약 표까지 한 번에 생성하도록 구성되어 있습니다.

Python

from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn

# 1. 새로운 빈 워드 문서(보고서) 객체 생성하기
doc = Document()

# 2. 관공서 표준 양식에 맞춘 문서 여백 설정 (상하좌우 1인치)
for section in doc.sections:
    section.top_margin = Inches(1.0)
    section.bottom_margin = Inches(1.0)
    section.left_margin = Inches(1.0)
    section.right_margin = Inches(1.0)

# 3. 한글 폰트가 깨지지 않고 깔끔하게 적용되도록 돕는 실무 함수
def set_korean_font(run, font_name="맑은 고딕", size_pt=11, is_bold=False, color_rgb=None):
    run.font.name = font_name
    # 워드 내부의 동아시아(한글) 글꼴 설정을 강제로 지정하여 폰트 풀림 방지
    run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)
    run.font.size = Pt(size_pt)
    run.font.bold = is_bold
    if color_rgb:
        run.font.color.rgb = RGBColor(*color_rgb)

# 4. 보고서 상단 대제목 작성 (가운데 정렬 및 짙은 네이비 컬러)
title_p = doc.add_paragraph()
title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
title_run = title_p.add_run("2026년 10월 방역 소독 결과 보고서")
set_korean_font(title_run, "맑은 고딕", 22, True, (31, 78, 120))

# 보고서 부제목(제출처 및 작성자 정보) 추가
sub_p = doc.add_paragraph()
sub_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
sub_run = sub_p.add_run("제출처: 안성시청 보건위생과  |  작성자: 스마트방역 대표 김상중")
set_korean_font(sub_run, "맑은 고딕", 11, False, (100, 100, 100))

# 본문과의 시각적 구분을 위한 빈 줄 추가
doc.add_paragraph()

# 5. 첫 번째 항목: 추진 개요 작성
h1_p = doc.add_paragraph()
h1_run = h1_p.add_run("1. 10월 주요 방역 추진 개요")
set_korean_font(h1_run, "맑은 고딕", 14, True, (31, 78, 120))

body_p = doc.add_paragraph()
body_run = body_p.add_run(
    "본 보고서는 2026년 10월 한 달간 안성시 관내 취약 구역 및 다중이용시설을 대상으로 실시한 "
    "정기 해충 방역 및 소독 처리 결과를 기록한 공식 문서입니다. "
    "스마트방역은 해충 서식지 사전 차단과 유충 구제를 중심으로 작업을 수행하였으며, "
    "인체 무해성이 검증된 환경부 승인 약품만을 100% 사용하여 시민들의 안전한 보건 환경 조성에 만전을 기하였습니다."
)
set_korean_font(body_run, "맑은 고딕", 10.5, False)

doc.add_paragraph()

# 6. 두 번째 항목: 권역별 방역 실적 요약 표(Table) 그리기
h2_p = doc.add_paragraph()
h2_run = h2_p.add_run("2. 권역별 방역 소독 실적 요약")
set_korean_font(h2_run, "맑은 고딕", 14, True, (31, 78, 120))

table_data = [
    ["방역 권역명", "소독 완료 개소", "사용 약품 및 방식", "비고"],
    ["안성시 공도읍 제1구역", "45개소", "친환경 연무 및 잔류 분무", "정상 완료"],
    ["대덕면 상가 밀집 구역", "38개소", "유충 구제제 및 살균 소독", "정상 완료"],
    ["인지동 공공시설 일대", "22개소", "정밀 표적 방제 작업", "정상 완료"]
]

# 데이터 크기에 맞춘 표 생성 및 기본 격자 테두리 적용
table = doc.add_table(rows=len(table_data), cols=4)
table.style = "Table Grid"
table.alignment = WD_TABLE_ALIGNMENT.CENTER

for r_idx, row_values in enumerate(table_data):
    row_cells = table.rows[r_idx].cells
    for c_idx, val in enumerate(row_values):
        row_cells[c_idx].text = ""
        cell_p = row_cells[c_idx].paragraphs[0]
        cell_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
        cell_run = cell_p.add_run(str(val))
        
        # 첫 번째 제목 줄(헤더)은 굵은 글씨로 강조
        if r_idx == 0:
            set_korean_font(cell_run, "맑은 고딕", 10.5, True, (31, 78, 120))
        else:
            set_korean_font(cell_run, "맑은 고딕", 10, False)

# 7. 최종 완성된 워드 보고서 파일 저장하기
output_path = r"C:\Users\Admin\Desktop\스마트방역_10월_결과보고서_완료.docx"
doc.save(output_path)

print("관공서 제출용 워드 보고서가 성공적으로 생성되었습니다! 이제 퇴근하십시오.")

이 파이썬 워드 문서 자동 생성 코드를 처음 완성해서 실행 버튼을 누르던 날 밤의 감격을 지금도 잊을 수 없습니다.

새벽 1시까지 워드 창을 붙잡고 표 칸을 맞추며 씨름하던 작업이, 터미널 창에 완료 메시지가 뜬 지 단 3초 만에 끝났기 때문입니다. 바탕화면에 생성된 워드 파일을 더블클릭해 열어보니, 짙은 남색의 큼직한 제목 아래로 제출처와 제 이름이 반듯하게 적혀 있고, 격자 테두리가 깔끔하게 쳐진 요약 표 안에 권역별 실적이 오차 하나 없이 들어가 있었습니다.

판다스 엑셀 읽기 기능(pd.read_excel)을 이 코드 앞단에 살짝 연결해 두기만 하면, 거래처가 30곳이든 50곳이든 반복문(for)을 통해 각 거래처 이름이 박힌 개별 워드 보고서 50개가 눈 깜짝할 사이에 폴더 안에 주르륵 쏟아져 나옵니다.

파이썬 워드 문서 자동 생성 코드로 완성된 관공서 제출용 스마트방역 결과 보고서 워드 화면
대체텍스트: 파이썬 워드 문서 자동 생성 코드로 완성된 관공서 제출용 스마트방역 결과 보고서 워드 화면

현업에서 피땀 흘리며 터득한 2가지 치명적 함정과 해결책

인터넷에 있는 기본 예제만 보고 파이썬 워드 문서 자동 생성을 실무에 적용하려다 보면, 한국 직장인들이 무조건 겪게 되는 당혹스러운 문제 두 가지가 있습니다. 제가 밤잠을 설쳐가며 찾아낸 실전 해결책을 공유합니다.

첫 번째는 ‘한글 폰트 풀림 현상(맑은 고딕이 안 먹히는 문제)’입니다. 분명히 코드에 run.font.name = "맑은 고딕"이라고 적었는데, 생성된 워드 파일을 열어보면 영어와 숫자만 맑은 고딕으로 나오고 정작 한글은 촌스러운 기본 바탕체나 굴림체로 깨져서 나오는 현상입니다.

이는 마이크로소프트 워드 프로그램이 영문 글꼴(ASCII)과 동아시아 한글 글꼴(East Asia)의 설정 방을 따로 구분해 놓았기 때문에 발생하는 문제입니다. 그래서 위 실전 코드의 3번 항목에 제가 만들어 넣은 set_korean_font 함수처럼, qn('w:eastAsia')라는 명령어를 사용해 “한글 폰트 방에도 맑은 고딕을 강제로 집어넣어라!”라고 못을 박아주어야 비로소 모든 한글이 우리가 원하는 깔끔한 서체로 출력됩니다. 이 한 줄의 코드가 보고서의 완성도를 하늘과 땅 차이로 갈라놓습니다.

두 번째는 ‘복잡한 회사 양식(로고, 도장, 다단 표) 처리 요령’입니다. 관공서나 회사 양식 중에는 상단 머리글에 회사 로고 이미지가 들어가고, 하단에는 대표자 직인(도장)이 찍혀 있으며, 셀 병합이 복잡하게 얽힌 표가 있는 경우가 많습니다. 이런 양식을 백지상태에서 파이썬 코드로만 일일이 그리려고 하면 배보다 배꼽이 더 커집니다.

이럴 때 현업에서 사용하는 가장 영리한 방법은 ‘템플릿(서식 파일) 빈칸 채우기’ 전략입니다. 워드 프로그램에서 로고와 도장, 복잡한 표 테두리를 미리 예쁘게 만들어 둔 보고서_양식.docx 파일을 저장해 둡니다. 그리고 바뀌어야 할 숫자나 날짜 자리에만 [방역일자], [소독장소]처럼 표시를 해둔 뒤, 파이썬으로 그 파일을 열어서 해당 글자만 실제 데이터로 쏙 바꿔치기(Replace)하여 다른 이름으로 저장하는 것입니다. 문단 제어와 스타일 지정에 관한 더 깊이 있는 원리가 궁금하시다면 Python-docx 공식 문서 가이드를 참고해 보시길 권합니다.

글을 맺으며: 서류 작업은 파이썬에게, 현장의 땀방울은 나에게

낮에는 직장인으로 본업을 지키고, 밤과 주말에는 스마트방역의 대표로 현장을 뛰며 제가 깨달은 것은 명확합니다. 사람의 에너지는 유한하며, 내가 진짜 집중해야 할 곳은 모니터 속의 줄 맞춤이 아니라 현장에서 만나는 고객과의 신뢰, 그리고 가족과 보내는 따뜻한 시간이라는 점입니다.

매달 똑같이 반복되는 워드 보고서 타이핑에 여러분의 소중한 밤 시간을 바치지 마십시오. 오늘 소개해 드린 파이썬 워드 문서 자동 생성 코드를 여러분의 업무에 맞게 한 번만 세팅해 두면, 앞으로 다가올 수십 번의 월말 야근이 단 3초의 클릭으로 바뀌게 됩니다.

만약 오늘 만든 이 워드 보고서 안에 넣을 ‘고해상도 현장 위치 지도’나 ‘주소별 위도·경도 좌표 데이터’를 어떻게 자동으로 준비하는지 궁금하시다면, 제가 바로 앞선 글에서 자세히 다루었던 [파이썬 주소 좌표 변환: 40대 N잡러가 방역 현장 100곳 위도 경도 3초 만에 뽑은 썰] 포스팅을 함께 읽어보시기 바랍니다. 엑셀에서 좌표를 뽑고, 지도를 그리고, 최종 워드 보고서로 묶어내는 완벽한 무인 자동화 생태계를 한눈에 확인하실 수 있습니다.

오늘도 회사와 가정, 그리고 자신의 꿈을 위해 늦은 밤까지 모니터 앞을 지키고 계신 대한민국 모든 40대 직장인과 N잡러 여러분의 빠른 마감과 편안한 밤을 진심으로 응원합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다