본문 바로가기
카테고리 없음

파이썬으로 거래명세서 자동 생성하기

by jbparkbill 2025. 10. 31.
반응형

파이썬으로 거래명세서 자동 생성하기
파이썬으로 거래명세서 자동 생성하기

IT·디지털 자동화 블로그 · 파이썬 엑셀 자동화

 

pandas와 openpyxl을 활용하면 수십 개 거래처의 거래명세서를 자동으로 생성할 수 있습니다. 이 글에서는 데이터 파일을 불러와 거래처별로 거래 내역을 정리하고, 각각의 엑셀 파일로 자동 저장하는 전체 과정을 다룹니다.

왜 거래명세서 자동화인가

거래명세서는 영업팀, 회계팀, 납품 관리 등에서 필수 문서입니다. 그러나 수작업으로 작성할 경우, 거래처마다 데이터를 복사·붙여넣기 해야 하므로 시간이 많이 걸립니다. 파이썬을 이용하면 데이터 파일 한 개로 수십 개 거래명세서를 자동으로 생성할 수 있습니다.

환경 설정

pip install pandas openpyxl

이 두 패키지는 엑셀 데이터를 다루고, 서식을 적용하는 데 필수입니다.

기초 데이터 준비

기본 거래 데이터를 다음과 같이 준비합니다.

📄 sales_data.xlsx
┌────────┬───────────────┬───────┬───────┬───────┐
│ 거래처 │ 품목명 │ 단가 │ 수량 │ 날짜 │
├────────┼───────────────┼───────┼───────┼───────┤
│ A상사 │ 모니터 │ 200000 │ 3 │ 2025-10-28 │
│ B전자 │ 키보드 │ 40000 │ 5 │ 2025-10-28 │
│ A상사 │ 마우스 │ 25000 │ 4 │ 2025-10-29 │
└────────┴───────────────┴───────┴───────┴───────┘

자동 거래명세서 생성

pandas로 데이터를 불러온 뒤, 거래처별로 그룹화(groupby)하여 각각의 엑셀로 저장합니다.

import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Alignment, Font, Border, Side
import os

# 데이터 불러오기
df = pd.read_excel("sales_data.xlsx")

# 거래처 목록 추출
partners = df["거래처"].unique()

# 저장 폴더 생성
os.makedirs("거래명세서", exist_ok=True)

for partner in partners:
    wb = Workbook()
    ws = wb.active
    ws.title = "거래명세서"

    # 헤더
    ws.append(["거래처명", partner])
    ws.append(["품목명", "단가", "수량", "금액", "날짜"])
    ws.merge_cells("A1:E1")

    # 데이터 필터링
    sub_df = df[df["거래처"] == partner]
    for _, row in sub_df.iterrows():
        amount = row["단가"] * row["수량"]
        ws.append([row["품목명"], row["단가"], row["수량"], amount, row["날짜"]])

    wb.save(f"거래명세서/{partner}_거래명세서.xlsx")
print("거래명세서 자동 생성 완료!")

이 스크립트는 거래처별 엑셀 파일을 자동으로 생성하고, 이름을 규칙적으로 지정합니다.

서식 및 디자인 적용

openpyxl 스타일 기능을 이용하면 보고서처럼 깔끔하게 꾸밀 수 있습니다.

thin = Side(style="thin", color="999999")
border = Border(left=thin, right=thin, top=thin, bottom=thin)
align = Alignment(horizontal="center", vertical="center")

for row in ws.iter_rows(min_row=2, max_row=ws.max_row, max_col=5):
    for cell in row:
        cell.alignment = align
        cell.border = border
        if cell.column == 4 and isinstance(cell.value, (int, float)):
            cell.font = Font(bold=True, color="1E88E5")

이렇게 하면 거래 금액이 강조된 파란색 글씨로 표시되고, 전체 테이블이 중앙 정렬된 형태로 출력됩니다.

거래처별 자동 저장

파일명에 날짜를 포함하면 버전 관리가 용이합니다.

from datetime import datetime
today = datetime.now().strftime("%Y%m%d")
wb.save(f"거래명세서/{partner}_거래명세서_{today}.xlsx")

매일 자동으로 실행되게 설정하면, 회사 거래내역 백업 시스템으로도 활용 가능합니다.

다음 글 예고: 거래명세서 + 이메일 자동 발송 시스템

다음 편에서는 생성된 거래명세서를 이메일에 자동 첨부해 거래처별로 발송하는 코드를 다룹니다.

다음 글 보러 가기

관련 읽을거리: 엑셀 서식 자동 지정 · 자동 보고서 메일 발송

참고: Python pandas, openpyxl 공식 문서. 본 예제는 회계, 영업, 납품관리 등 거래 관련 문서 자동화에 즉시 적용 가능합니다.

반응형