파이썬으로 엑셀 매크로 대체하기: 자동화 예제 3가지

 

파이썬으로 엑셀 매크로 대체하기: 자동화 예제 3가지


개발 환경 준비

  • Python 3.7 이상
  • 터미널에서 라이브러리 설치
    pip install pandas openpyxl xlwings glob2
    

이제 본격적으로 “엑셀 자동화” 스크립트를 작성해볼게요.


예제 1: 행 단위 금액 합계 자동 계산

  1. 목표
    • 기존 엑셀(sales_data.xlsx)의 “단가” 열과 “수량” 열을 곱한 뒤
    • “총합계” 열을 만들어 결과를 새 파일로 저장
  2. 사용 라이브러리
    • pandas
    • openpyxl (백엔드로 자동 선택됨)
  3. 단계별 코드
import pandas as pd

# 1. 엑셀 파일을 불러와 DataFrame으로 변환
df = pd.read_excel("sales_data.xlsx", sheet_name="Sheet1")

# 2. 각 행의 단가 * 수량 값을 “총합계”라는 새 열로 추가
df["총합계"] = df["단가"] * df["수량"]

# 3. 계산된 DataFrame을 새 엑셀 파일로 저장
df.to_excel("sales_data_with_total.xlsx", index=False)
  • read_excel: 파일과 시트를 지정해 데이터를 읽어옵니다.
  • df["총합계"] = …: 기존 DataFrame에 새 열을 바로 추가합니다.
  • to_excel: 결과를 다시 엑셀 파일로 덮어쓰기 없이 생성합니다.

예제 2: 조건별 셀 서식(글꼴 색상) 변경

  1. 목표
    • report.xlsx의 “Summary” 시트에서
    • 세 번째 열(C열)의 값이 50 미만인 셀을 빨간 글씨로 강조
  2. 사용 라이브러리
    • openpyxl
  3. 단계별 코드
from openpyxl import load_workbook
from openpyxl.styles import Font

# 1. 워크북과 시트 열기
wb = load_workbook("report.xlsx")
ws = wb["Summary"]

# 2. 2행부터 마지막 행까지 순회하며 C열 값 체크
for row in ws.iter_rows(min_row=2, max_col=3):
    cell = row[2]               # row[2] == C열
    if isinstance(cell.value, (int, float)) and cell.value < 50:
        # 3. 조건 충족 시 빨간 글꼴로 변경
        cell.font = Font(color="FF0000")

# 4. 변경된 워크북을 새 파일로 저장
wb.save("report_highlighted.xlsx")
  • load_workbook: 원본 엑셀 파일을 객체 형태로 불러옵니다.
  • iter_rows: 범위를 지정해 셀을 이터레이션합니다.
  • Font(color="FF0000"): 헥스 코드로 색상을 지정합니다.

예제 3: 폴더 내 다수 엑셀 파일 병합 후 요약 리포트

  1. 목표
    • data_folder 폴더 안에 있는 모든 .xlsx 파일을 읽어서
    • 하나의 테이블로 합친 뒤
    • 카테고리별 매출 합계를 요약해 새로운 리포트 생성
  2. 사용 라이브러리
    • pandas
    • glob2
  3. 단계별 코드
import pandas as pd
import glob

# 1. 와일드카드(*)로 폴더 내 xlsx 파일 목록 수집
file_list = glob.glob("data_folder/*.xlsx")

# 2. 비어 있는 DataFrame 준비
combined_df = pd.DataFrame()

# 3. 각 파일을 읽어 기존 DataFrame에 순차 추가
for file in file_list:
    temp_df = pd.read_excel(file)
    combined_df = combined_df.append(temp_df, ignore_index=True)

# 4. 피벗 테이블로 카테고리별 매출 합계 계산
summary = combined_df.pivot_table(
    index="Category",
    values="Sales",
    aggfunc="sum"
)

# 5. 최종 요약 리포트를 엑셀로 저장
summary.to_excel("summary_report.xlsx")
  • glob.glob("*.xlsx"): 특정 폴더에서 파일 확장자별로 리스트를 가져옵니다.
  • append(..., ignore_index=True): 인덱스를 새로 매겨가며 DataFrame을 합칩니다.
  • pivot_table: 여러 행을 그룹화해 요약된 통계 테이블을 만듭니다.

 

댓글 남기기