Excel 디자인 유지 Python으로 XML 단위로 데이터 병합하기
2025. 3. 7. 14:30ㆍ개발/PythonExcel
728x90
반응형
엑셀(Excel) 작업 중 가장 자주 맞닥뜨리는 고민 중 하나는 바로 '디자인이 유지된 상태로 파일을 병합하는 것'입니다. 특히 광고 보고서나 마케팅 데이터를 매월 정리해야 하는 경우, 기존 템플릿의 디자인이 흐트러지지 않고 데이터를 정확히 입력하여 보고서를 생성하는 것이 중요합니다.
이번 포스팅에서는 Python을 이용하여 두 개의 Excel 파일을 XML 단위에서 병합하여, 기존 엑셀 디자인을 깨지 않고 데이터를 합치는 방법에 대해 소개하겠습니다.
왜 XML 단위로 병합해야 하나?
엑셀(xlsx) 파일은 사실 내부적으로 여러 개의 XML 파일로 구성된 zip 압축 파일입니다. 일반적인 방식으로 엑셀 파일을 수정하면 기존 디자인 요소(서식, 표, 스타일 등)가 손상될 수 있지만, XML 레벨에서 데이터를 교체하면 원본 디자인을 유지하면서 데이터만 바꿀 수 있습니다.
XML 병합의 핵심 원리
- 기존 템플릿 파일에서 병합 대상인 sheet XML을 추출합니다.
- 데이터가 포함된 새 파일에서 sheet XML을 추출합니다.
- XML에서
<sheetData>
부분만 새 파일의 데이터로 교체합니다. - XML을 다시 압축하여 최종 엑셀 파일을 만듭니다.
실제 코드로 알아보는 XML 병합 방법
다음은 Python을 활용한 핵심 코드입니다:
import zipfile
import shutil
import os
import re
# 기존 엑셀 템플릿 압축 해제
with zipfile.ZipFile("template.xlsx", "r") as zip_ref:
zip_ref.extractall("original_excel")
# 새 데이터가 입력된 엑셀 압축 해제
with zipfile.ZipFile("data_filled.xlsx", "r") as zip_ref:
zip_ref.extractall("new_excel")
# 기존 sheet XML 경로
original_sheet = os.path.join("original_excel", "xl", "worksheets", "sheet1.xml")
new_sheet = os.path.join("new_excel", "xl", "worksheets", "sheet1.xml")
# XML 데이터 추출 및 교체
with open(original_sheet, "r", encoding="utf-8") as f:
original_content = f.read()
with open(new_sheet, "r", encoding="utf-8") as f:
new_content = f.read()
# <sheetData> 내용 교체
original_content = re.sub(
r"(?<=<sheetData>).*?(?=</sheetData>)",
re.search(r"(?<=<sheetData>).*?(?=</sheetData>)", new_content).group(),
original_content,
)
# 교체된 XML 다시 저장
with open(original_sheet, "w", encoding="utf-8") as f:
f.write(original_content)
# 변경된 내용을 압축하여 최종 엑셀 파일 생성
with zipfile.ZipFile("final_report.xlsx", "w", compression=zipfile.ZIP_DEFLATED) as new_zip:
for root, _, files in os.walk("original_excel"):
for file in files:
file_path = os.path.join(root, file)
arc_name = os.path.relpath(file_path, "original_excel")
new_zip.write(file_path, arc_name)
# 임시 폴더 삭제
shutil.rmtree("original_excel")
shutil.rmtree("new_excel")
이 방법의 장점
- 엑셀 서식 및 디자인 유지
- 대량 데이터 처리 시 효율적
- 자동화하여 업무 효율 향상
마무리
XML 기반으로 엑셀 파일을 병합하는 방법은 복잡해 보이지만, 원리를 이해하면 매우 강력한 도구가 됩니다. 이 방법을 통해 반복되는 보고서 작업에서 디자인 걱정 없이 데이터를 업데이트하고 효율을 극대화할 수 있습니다. 앞으로 업무 자동화와 데이터 관리에 적극 활용해 보세요!
'개발 > PythonExcel' 카테고리의 다른 글
Pandas, Openpyxl, XlsxWriter: 엑셀 데이터 처리 라이브러리 비교 (0) | 2023.11.21 |
---|