엑셀 자동화 — Python으로 Excel 완벽 제어하기
마우스로 수백 번 클릭하던 작업을 코드로 단숨에 처리합니다.
openpyxl 라이브러리를 활용해 엑셀 파일을 읽고, 데이터를 집계하고, 서식을 입혀 새로운 보고서를 찍어냅니다.
왜 Excel 자동화인가?
회계·세무 실무에서는 거래처 자료를 받고, 엑셀을 열고, суммы을 계산하고, 서식을 맞춰 보고서를 작성하는 과정이 무한히 반복됩니다. 이 단순 반복 작업을 파이썬이 순식간에 대신해 줍니다.
openpyxl 설치와 Excel 계층 구조
Python에서 엑셀(.xlsx) 파일을 다루기 위한 필수 라이브러리인 openpyxl을 설치합니다.
pip install openpyxlExcel은 크게 세 가지 계층으로 이루어져 있습니다. 이 구조만 이해하면 됩니다.
├── 📑 Worksheet (시트, 예: "거래처" 시트)
│ ├── 🔲 Cell (셀, 예: A1)
│ └── 🔲 Cell (셀, 예: B1)
└── 📑 Worksheet (시트, 예: "매출" 시트)
셀에 데이터를 쓰고, 읽어오기
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(["DEF기업", 15000000])을 실행하면 데이터가 있는 마지막 행 바로 다음 줄에 알아서 추가됩니다.
행 단위로 읽기 (iter_rows)
실무에서는 데이터가 수천 줄입니다. 하나하나 셀 주소를 부르지 않고, 반복문으로 전체 데이터를 싹 긁어옵니다.
# values_only=True 를 주면 번거로운 셀 객체 대신 알맹이 값만 튜플로 가져옵니다. for row in sheet.iter_rows(values_only=True): print(row) # 출력 예: ('ABC상사', 5000000)
엑셀 조작의 꽃 — 자동 합계와 부가세 계산
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")
셀 서식 지정 (글꼴 굵게, 원화 표시, 정렬)
단순히 데이터만 밀어넣은 엑셀은 보기 안 좋습니다. 파이썬으로 엑셀의 서식(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"원"'
종합 실습 — 부가세 자동 분석 보고서
원본 데이터를 분석한 뒤, create_sheet()로 새로운 시트("보고서")를 하나 만들어 요약 결과를 깔끔하게 찍어내는 완벽한 자동화 스크립트입니다.
| 구분 | 금액 |
|---|---|
| 총 매출 공급가액 | 500,000,000원 |
| 총 부가세 | 50,000,000원 |
| 총 합계 금액 | 550,000,000원 |
(강의시간 실습 내용: sales.xlsx를 열어 위 표를 보고서 시트에 자동으로 그려주고 sales_report.xlsx로 저장하는 스크립트 구현)
9단계 핵심 개념 및 다음 단계 예고
openpyxl.load_workbook("data.xlsx"): 파일 열기sheet = workbook["Sheet1"]: 시트 접근sheet["A1"].value: 특정 셀 값 읽기/쓰기sheet.append([...]): 다음 빈 행에 데이터 추가sheet.max_row: 데이터가 있는 마지막 행 번호 추출
openpyxl은 엑셀 파일 그 자체(서식, 셀)를 다루는 데 특화되어 있습니다.
하지만 데이터가 만 건, 십만 건으로 늘어나고 "거래처별로 그룹핑해서 합계 내줘", "5월 데이터만 필터링해줘" 같은 복잡한 통계/분석이 필요할 때는 Pandas(판다스)라는 데이터 분석 끝판왕 라이브러리를 사용합니다. 10단계부터는 진짜 데이터 과학의 영역으로 넘어갑니다!