AI/IT
Python
직접 작성

Python으로 엑셀 자동화하기: openpyxl 입문

L
Lee Jae Hyun
3분 소요

왜 Python으로 엑셀을 다루는가

회계 실무에서 엑셀은 여전히 핵심 도구입니다. 하지만 매월 반복되는 시산표 정리, 계정별 원장 추출, 보고서 포맷 변환 같은 작업을 수작업으로 처리하면 시간이 낭비될 뿐 아니라 휴먼 에러의 위험도 높아집니다.

Python의 openpyxl 라이브러리를 활용하면 이런 반복 작업을 자동화할 수 있습니다. VBA보다 범용성이 높고, 데이터 분석 라이브러리(pandas, numpy)와의 연계도 자유롭습니다.

설치 및 기본 설정

터미널에서 다음 명령어로 openpyxl을 설치합니다.

pip install openpyxl

설치가 완료되면 Python 스크립트에서 바로 사용할 수 있습니다.

from openpyxl import Workbook, load_workbook

# 새 워크북 생성
wb = Workbook()
ws = wb.active
ws.title = "시산표"

# 기존 파일 열기
wb = load_workbook("월별_시산표.xlsx")
ws = wb["Sheet1"]

데이터 읽기와 쓰기

셀 단위 또는 행/열 단위로 데이터를 읽고 쓸 수 있습니다.

# 셀 단위 읽기/쓰기
ws["A1"] = "계정코드"
ws["B1"] = "계정명"
ws["C1"] = "차변"
ws["D1"] = "대변"

# 행 단위 추가
data = [
    ["1010", "현금및현금성자산", 50000000, 0],
    ["1020", "단기금융상품", 200000000, 0],
    ["2010", "매입채무", 0, 80000000],
    ["3010", "자본금", 0, 100000000],
]

for row in data:
    ws.append(row)

# 특정 범위 읽기
for row in ws.iter_rows(min_row=2, max_col=4, values_only=True):
    code, name, debit, credit = row
    print(f"{code} {name}: 차변 {debit:,} / 대변 {credit:,}")

셀 서식 지정

보고서 품질을 높이려면 서식 지정이 중요합니다.

from openpyxl.styles import Font, Alignment, Border, Side, PatternFill

# 헤더 스타일
header_font = Font(name="맑은 고딕", size=11, bold=True, color="FFFFFF")
header_fill = PatternFill(start_color="2F5496", end_color="2F5496", fill_type="solid")
center_align = Alignment(horizontal="center", vertical="center")
thin_border = Border(
    left=Side(style="thin"),
    right=Side(style="thin"),
    top=Side(style="thin"),
    bottom=Side(style="thin"),
)

# 헤더 행에 스타일 적용
for cell in ws[1]:
    cell.font = header_font
    cell.fill = header_fill
    cell.alignment = center_align
    cell.border = thin_border

# 숫자 포맷 (천 단위 구분)
for row in ws.iter_rows(min_row=2, min_col=3, max_col=4):
    for cell in row:
        cell.number_format = "#,##0"
        cell.border = thin_border

실무 예제: 시산표 차대 검증 자동화

월말 결산 시 시산표의 차변 합계와 대변 합계가 일치하는지 자동으로 검증하는 스크립트입니다.

from openpyxl import load_workbook

def validate_trial_balance(filepath):
    """시산표 차대 검증 함수"""
    wb = load_workbook(filepath)
    ws = wb.active

    total_debit = 0
    total_credit = 0
    errors = []

    for row_num, row in enumerate(ws.iter_rows(min_row=2, max_col=4, values_only=True), start=2):
        code, name, debit, credit = row

        if debit is None:
            debit = 0
        if credit is None:
            credit = 0

        total_debit += debit
        total_credit += credit

        # 차변과 대변에 동시에 금액이 있는 경우 경고
        if debit > 0 and credit > 0:
            errors.append(f"행 {row_num}: {name} - 차변/대변 동시 입력")

    # 결과 출력
    print(f"차변 합계: {total_debit:,.0f}")
    print(f"대변 합계: {total_credit:,.0f}")
    print(f"차이금액: {abs(total_debit - total_credit):,.0f}")

    if total_debit == total_credit:
        print("검증 결과: 차대 일치")
    else:
        print("검증 결과: 차대 불일치 - 확인 필요!")

    if errors:
        print(f"\n경고 사항 ({len(errors)}건):")
        for err in errors:
            print(f"  - {err}")

    return total_debit == total_credit

# 실행
validate_trial_balance("2025년_1월_시산표.xlsx")

다음 단계

openpyxl의 기본을 익혔다면 다음 단계로 넘어가 봅시다.

  • pandas 연계: 대량 데이터 처리 시 pandas DataFrame과 openpyxl을 조합하면 훨씬 효율적입니다.
  • 차트 생성: openpyxl은 엑셀 차트 생성도 지원합니다. 월별 추이 그래프를 자동으로 삽입할 수 있습니다.
  • 다중 파일 처리: glob 모듈과 함께 사용하면 폴더 내 모든 엑셀 파일을 일괄 처리할 수 있습니다.
  • 스케줄링: Windows 작업 스케줄러나 cron과 연동하면 매월 자동 실행되는 결산 보조 도구를 만들 수 있습니다.

반복 업무를 자동화하면 실무자는 숫자를 입력하는 사람에서 숫자를 해석하는 사람으로 역할이 전환됩니다. 작은 스크립트 하나가 업무의 질을 바꿀 수 있습니다.

Knowledge Map

Loading Graph...
직접 작성
시리즈
자료
참고자료