수백 개 엑셀 파일, 파이썬으로 1초 만에 하나로 합치기
수백 개 엑셀 파일, 파이썬으로 1초 만에 하나로 합치기 (완성 코드 공개)
"1분기_매출_현황.xlsx", "2분기_매출_현황.xlsx", "지점별_재고_취합.xlsx"…
팀원들이 각자 보낸 수십 개의 엑셀 파일을 일일이 열어 Ctrl+C, Ctrl+V 하다 보면 반드시 실수가 납니다. 데이터를 누락하거나 엉뚱한 행에 붙여넣는 오류는 수동 작업의 숙명입니다. 파이썬을 한 번만 세팅해두면 이 반복 작업을 영구적으로 없앨 수 있습니다.
1단계: 준비물 설치
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다. 이 항목을 빠뜨리면 나중에 명령어가 작동하지 않습니다.
설치 후 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행합니다:
pip install pandas openpyxl
pandas는 엑셀 데이터를 표 형태로 읽고 쓰는 라이브러리이고, openpyxl은 .xlsx 포맷을 처리하는 엔진입니다. 둘 다 필수입니다.
⚠️ 주의: 합칠 엑셀 파일들이 모두 같은 열 구조(헤더)를 가져야 합니다. 예를 들어 A열=이름, B열=금액 형태가 모든 파일에서 동일해야 합니다. 구조가 다르면 아래 '응용' 섹션을 참고하세요.
2단계: 완성 코드
아래 코드를 그대로 복사해서 메모장에 붙여넣고, merge_excel.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import os
import pandas as pd
from pathlib import Path
# ① 설정: 합칠 파일이 있는 폴더 경로를 여기에 입력하세요
FOLDER_PATH = r"C:\Users\내이름\Desktop\엑셀모음" # ← 본인 경로로 수정
OUTPUT_FILE = "합쳐진_최종_마스터.xlsx" # ← 결과 파일명
# ② 폴더 안의 모든 엑셀 파일을 찾아서 읽기
all_data = []
folder = Path(FOLDER_PATH)
for file in sorted(folder.glob("*.xlsx")) + sorted(folder.glob("*.xls")):
try:
df = pd.read_excel(file, engine="openpyxl")
df["출처파일"] = file.name # 어느 파일에서 왔는지 추적
all_data.append(df)
print(f" ✔ {file.name} ({len(df)}행)")
except Exception as e:
print(f" ✘ {file.name} 읽기 실패: {e}")
# ③ 하나로 합치고 저장
if not all_data:
print("⚠ 엑셀 파일을 찾을 수 없습니다. FOLDER_PATH를 확인하세요.")
else:
combined = pd.concat(all_data, ignore_index=True)
output_path = folder / OUTPUT_FILE
combined.to_excel(output_path, index=False)
print(f"\n✅ 완료! 총 {len(combined)}행 → {output_path}")
3단계: 실행 방법
- 합칠 엑셀 파일들을 하나의 폴더에 모아둡니다.
- 코드 ① 설정줄의
FOLDER_PATH에 그 폴더 경로를 넣습니다.
💡 팁: 윈도우 탐색기에서 폴더를 열고 주소창을 클릭하면 경로를 바로 복사할 수 있습니다. - 터미널에서 아래 명령어로 실행합니다:
python merge_excel.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ 1분기_매출_현황.xlsx (248행) ✔ 2분기_매출_현황.xlsx (301행) ✔ 지점별_재고_취합.xlsx (87행) ✅ 완료! 총 636행 → C:\Users\내이름\Desktop\엑셀모음\합쳐진_최종_마스터.xlsx
같은 폴더 안에 합쳐진_최종_마스터.xlsx 파일이 생성됩니다. "출처파일" 열이 자동으로 추가되어 각 행이 어떤 파일에서 왔는지 바로 확인할 수 있습니다.
4단계: 자주 발생하는 오류와 해결법
오류 1: ModuleNotFoundError: No module named 'pandas'
설치 명령어를 실행했는데도 이 오류가 나온다면, 파이썬이 여러 버전 설치된 경우입니다. 아래 명령어로 다시 시도하세요.
python -m pip install pandas openpyxl
오류 2: FileNotFoundError
FOLDER_PATH에 입력한 경로가 틀린 경우입니다. 경로 앞에 r을 붙였는지 확인하세요 (r"C:\..." 형태). r을 붙이지 않으면 백슬래시(\)가 특수문자로 처리되어 경로 인식에 실패합니다.
오류 3: 합쳐진 파일에 열이 뒤섞임
파일마다 열 이름이 다를 때 발생합니다. pd.concat은 열 이름을 기준으로 맞추기 때문에 없는 열은 빈칸으로 채워집니다. 모든 파일의 헤더(1행)가 정확히 일치하는지 먼저 확인하세요.
응용: 파일별로 다른 시트에 저장하고 싶다면
하나의 시트에 전부 합치는 대신, 파일마다 별도 시트로 나눠 저장하는 방법입니다. 위 코드에서 ③ 저장 부분을 아래 코드로 교체하면 됩니다.
with pd.ExcelWriter(folder / "시트별_마스터.xlsx", engine="openpyxl") as writer:
for file, df in zip(sorted(folder.glob("*.xlsx")), all_data):
sheet_name = file.stem[:31] # 엑셀 시트명은 31자 제한
df.to_excel(writer, sheet_name=sheet_name, index=False)
print("✅ 시트별 저장 완료!")
💡 매달 반복되는 작업이라면: 이 .py 파일을 바탕화면에 저장해두고, 매달 새 엑셀 파일만 폴더에 넣은 뒤 더블클릭하면 됩니다. 한 번 만들어두면 영구적으로 재사용할 수 있습니다.
핵심 요약
- 준비물: Python + pandas + openpyxl 설치 (pip install pandas openpyxl)
- 설정: 코드 안의 FOLDER_PATH만 본인 폴더 경로로 수정
- 실행: 터미널에서 python merge_excel.py 입력
- 결과: 출처파일 열이 포함된 마스터 엑셀 파일이 같은 폴더에 자동 생성
이 코드를 응용하면 특정 시트만 골라 합치거나, 특정 열만 추출해서 병합하는 것도 가능합니다.