Phase 2 · 본격 업무 자동화

엑셀 자동화 — Python으로 Excel 완벽 제어하기

마우스로 수백 번 클릭하던 작업을 코드로 단숨에 처리합니다.
openpyxl 라이브러리를 활용해 엑셀 파일을 읽고, 데이터를 집계하고, 서식을 입혀 새로운 보고서를 찍어냅니다.

예상 학습 시간 : 150분
난이도 : ★★★★☆
사전 단계 : Phase 1 완료
다음 단계 : Pandas 대량 데이터 분석
01

왜 Excel 자동화인가?

회계·세무 실무에서는 거래처 자료를 받고, 엑셀을 열고, суммы을 계산하고, 서식을 맞춰 보고서를 작성하는 과정이 무한히 반복됩니다. 이 단순 반복 작업을 파이썬이 순식간에 대신해 줍니다.

원본 Excel
ERP 다운로드 파일
Python 처리
자동 계산 및 서식 지정
완성된 보고서
깔끔한 새 Excel 파일
02

openpyxl 설치와 Excel 계층 구조

Python에서 엑셀(.xlsx) 파일을 다루기 위한 필수 라이브러리인 openpyxl을 설치합니다.

💻 터미널 명령어
pip install openpyxl

Excel은 크게 세 가지 계층으로 이루어져 있습니다. 이 구조만 이해하면 됩니다.

📊 Workbook (엑셀 파일 자체, 예: customers.xlsx)
├── 📑 Worksheet (시트, 예: "거래처" 시트)
│ ├── 🔲 Cell (셀, 예: A1)
│ └── 🔲 Cell (셀, 예: B1)
└── 📑 Worksheet (시트, 예: "매출" 시트)
03

셀에 데이터를 쓰고, 읽어오기

새로운 파일 만들고 쓰기
import openpyxl

# 1. Workbook(파일) 생성
workbook = openpyxl.Workbook()
sheet = workbook.active # 활성화된 시트 선택

# 2. 셀에 데이터 입력
sheet["A1"] = "거래처명"
sheet["B1"] = "거래금액"
sheet["A2"] = "ABC상사"
sheet["B2"] = 5000000

# 3. 파일 저장
workbook.save("customers.xlsx")
기존 파일 열고 읽기
import openpyxl

# 1. 파일 열기
workbook = openpyxl.load_workbook("customers.xlsx")

# 2. 특정 시트 선택
sheet = workbook["Sheet"]

# 3. 값 읽기 (.value 필수)
value = sheet["B2"].value
print("가져온 값:", value)
sheet.append() 로 데이터 밀어넣기

여러 행을 한 번에 넣을 때는 반복문을 돌리면서 리스트 형태로 밀어넣는 것이 편합니다.
sheet.append(["DEF기업", 15000000])을 실행하면 데이터가 있는 마지막 행 바로 다음 줄에 알아서 추가됩니다.

04

행 단위로 읽기 (iter_rows)

실무에서는 데이터가 수천 줄입니다. 하나하나 셀 주소를 부르지 않고, 반복문으로 전체 데이터를 싹 긁어옵니다.

🐍 엑셀 데이터 전체 스캔
# values_only=True 를 주면 번거로운 셀 객체 대신 알맹이 값만 튜플로 가져옵니다.
for row in sheet.iter_rows(values_only=True):
    print(row)
    
# 출력 예: ('ABC상사', 5000000)
05

엑셀 조작의 꽃 — 자동 합계와 부가세 계산

D열에 있는 거래금액을 쭉 읽어와서 파이썬으로 합계를 구하고, E열에 부가세를, F열에 합계(공급가액+부가세)를 자동으로 찍어주는 코드입니다.

total = 0
sheet["E1"] = "부가세"
sheet["F1"] = "합계"

# 2번째 줄(데이터 시작점)부터 마지막 행(max_row)까지 반복
for row in range(2, sheet.max_row + 1):
    amount = sheet[f"D{row}"].value
    
    if amount == None: # 빈 셀이면 건너뛰기
        continue
        
    vat = amount * 0.1
    sheet[f"E{row}"] = vat
    sheet[f"F{row}"] = amount + vat
    
    total += amount
    
print(f"계산 완료! 총 공급가액은 {total:,}원 입니다.")
workbook.save("result.xlsx")
06

셀 서식 지정 (글꼴 굵게, 원화 표시, 정렬)

단순히 데이터만 밀어넣은 엑셀은 보기 안 좋습니다. 파이썬으로 엑셀의 서식(Formatting)까지 지정할 수 있습니다.

🐍 엑셀 서식 꾸미기
from openpyxl.styles import Font, Alignment

# 1. 1행(헤더)을 굵게, 가운데 정렬
for cell in sheet[1]:
    cell.font = Font(bold=True)
    cell.alignment = Alignment(horizontal="center")

# 2. 열 너비 조정 (가독성 향상)
sheet.column_dimensions["B"].width = 20

# 3. 천 단위 콤마와 "원" 기호 붙이기 (예: 5,000,000원)
for row in range(2, sheet.max_row + 1):
    sheet[f"D{row}"].number_format = '#,##0"원"'
    sheet[f"E{row}"].number_format = '#,##0"원"'
07

종합 실습 — 부가세 자동 분석 보고서

원본 데이터를 분석한 뒤, create_sheet()로 새로운 시트("보고서")를 하나 만들어 요약 결과를 깔끔하게 찍어내는 완벽한 자동화 스크립트입니다.

📊
실무형 프로젝트
매출/매입 자료 읽어 종합 리포트 엑셀 만들기
구분 금액
총 매출 공급가액500,000,000원
총 부가세50,000,000원
총 합계 금액550,000,000원

(강의시간 실습 내용: sales.xlsx를 열어 위 표를 보고서 시트에 자동으로 그려주고 sales_report.xlsx로 저장하는 스크립트 구현)

08

9단계 핵심 개념 및 다음 단계 예고

  • openpyxl.load_workbook("data.xlsx") : 파일 열기
  • sheet = workbook["Sheet1"] : 시트 접근
  • sheet["A1"].value : 특정 셀 값 읽기/쓰기
  • sheet.append([...]) : 다음 빈 행에 데이터 추가
  • sheet.max_row : 데이터가 있는 마지막 행 번호 추출
다음 단계 예고 — Step 10: Pandas 대량 데이터 분석

openpyxl은 엑셀 파일 그 자체(서식, 셀)를 다루는 데 특화되어 있습니다.
하지만 데이터가 만 건, 십만 건으로 늘어나고 "거래처별로 그룹핑해서 합계 내줘", "5월 데이터만 필터링해줘" 같은 복잡한 통계/분석이 필요할 때는 Pandas(판다스)라는 데이터 분석 끝판왕 라이브러리를 사용합니다. 10단계부터는 진짜 데이터 과학의 영역으로 넘어갑니다!

Step 08 : 예외처리와 모듈 Step 10 : Pandas 데이터 분석