중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날

이미지
중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날 이 블로그의 중복 파일 자동 삭제 편 과 파일명 일괄 변경 편 을 보면 공통적으로 "DRY_RUN"이라는 안전장치가 들어 있습니다. 실제 삭제나 변경 전에 미리보기부터 하도록 만든 이 습관은, 사실 처음부터 있던 게 아니라 한 번의 아찔한 경험 뒤에 생긴 것입니다. 당시 상황은 이랬습니다. 다운로드 폴더가 오래 방치되어 있어 용량을 확인해보니 중복 파일이 상당히 많았고, "파일 해시값을 비교해서 중복이면 자동으로 지우는" 스크립트를 처음 짜서 바로 실행했습니다. 사건 발생 — 실행 버튼을 누른 직후 처음 짠 코드는 대략 이런 형태였습니다. import hashlib from pathlib import Path from collections import defaultdict folder = Path(r"C:\Users\내이름\Downloads") hash_map = defaultdict(list) def get_hash(filepath): h = hashlib.md5() with open(filepath, "rb") as f: h.update(f.read()) return h.hexdigest() for file in folder.rglob("*"): if file.is_file(): hash_map[get_hash(file)].append(file) # 중복이면 첫 번째만 남기고 나머지 삭제 for files in hash_map.values(): if len(files) > 1: for f in files[1:]: f.unlink() # ← 바로 삭제 실행 print(f"삭제: {f.name}") 실행하자마자 터미널에 "삭제: ......

엑셀 안에 진짜 차트 자동 삽입! 파이썬으로 대시보드 만들기

엑셀 안에 진짜 차트 자동 삽입! 파이썬으로 대시보드 만들기 (완성 코드 공개)

파이썬으로 엑셀 안에 차트를 자동으로 삽입해 대시보드를 만드는 모습


이전 게시글 엑셀 데이터 차트 이미지 자동 저장 편에서는 차트를 PNG 이미지로 만드는 방법을 소개했습니다. 이미지는 보고서에 붙여넣기 좋지만, 데이터가 바뀌면 차트를 다시 그려야 합니다. 이번 글에서는 엑셀 파일 안에 진짜로 살아있는 차트를 자동으로 삽입하는 방법을 소개합니다. 엑셀에서 직접 열어보면 일반적으로 차트 마법사로 만든 것과 똑같이 더블클릭해서 수정하거나 데이터 범위를 바꿀 수 있습니다.


1단계: 준비물 설치

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.

터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install openpyxl pandas

openpyxl은 엑셀 파일 안에 네이티브 차트 객체를 직접 생성하는 기능을 지원합니다. matplotlib처럼 이미지를 그리는 것이 아니라, 엑셀이 인식하는 진짜 차트 데이터를 만듭니다. pandas는 원본 데이터를 읽는 데 사용합니다.

💡 이 코드로 만들 수 있는 차트: 막대 차트, 꺾은선 차트, 원형 차트, 영역 차트를 자동으로 생성하고 한 시트에 여러 차트를 배치해 대시보드 형태로 구성할 수 있습니다. 엑셀에서 더블클릭하면 차트 종류·색상·데이터 범위를 직접 수정할 수 있습니다.

2단계: 엑셀 파일 준비

아래처럼 1행이 헤더이고 2행부터 데이터가 입력된 형태면 됩니다.

월      매출       비용       순이익
1월    5,200,000  3,100,000  2,100,000
2월    6,800,000  3,500,000  3,300,000
3월    4,900,000  2,900,000  2,000,000
4월    7,400,000  4,100,000  3,300,000

3단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, excel_dashboard.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

from openpyxl import load_workbook
from openpyxl.chart import BarChart, LineChart, PieChart, Reference
from openpyxl.chart.label import DataLabelList
import pandas as pd
from pathlib import Path

# ① 설정
INPUT_PATH  = r"C:\Users\내이름\Desktop\월별매출.xlsx"      # ← 원본 데이터 엑셀
OUTPUT_PATH = r"C:\Users\내이름\Desktop\대시보드.xlsx"      # ← 결과 저장 경로
SHEET_NAME  = "데이터"   # ← 데이터가 있는 시트명

# ② 데이터를 시트에 쓰기 (없으면 새로 작성)
df = pd.read_excel(INPUT_PATH, engine="openpyxl")
print(f"  ✔ 데이터 로드 완료: {len(df)}행")

with pd.ExcelWriter(OUTPUT_PATH, engine="openpyxl") as writer:
    df.to_excel(writer, sheet_name=SHEET_NAME, index=False)

# ③ 저장된 파일을 다시 열어 차트 삽입
wb = load_workbook(OUTPUT_PATH)
ws = wb[SHEET_NAME]

max_row = ws.max_row
max_col = ws.max_column

# ④ 막대 차트: 월별 매출·비용·순이익 비교
bar_chart = BarChart()
bar_chart.title = "월별 매출·비용·순이익"
bar_chart.style = 10
bar_chart.x_axis.title = "월"
bar_chart.y_axis.title = "금액(원)"
bar_chart.width  = 18
bar_chart.height = 10

data  = Reference(ws, min_col=2, max_col=max_col, min_row=1, max_row=max_row)
cats  = Reference(ws, min_col=1, min_row=2, max_row=max_row)
bar_chart.add_data(data, titles_from_data=True)
bar_chart.set_categories(cats)
ws.add_chart(bar_chart, "F2")   # F2 셀 위치에 차트 삽입
print(f"  ✔ 막대 차트 삽입 완료")

# ⑤ 꺾은선 차트: 순이익 추이
line_chart = LineChart()
line_chart.title = "순이익 추이"
line_chart.style = 12
line_chart.x_axis.title = "월"
line_chart.y_axis.title = "순이익(원)"
line_chart.width  = 18
line_chart.height = 10

profit_data = Reference(ws, min_col=4, max_col=4, min_row=1, max_row=max_row)
line_chart.add_data(profit_data, titles_from_data=True)
line_chart.set_categories(cats)
ws.add_chart(line_chart, "F22")   # 막대 차트 아래쪽에 배치
print(f"  ✔ 꺾은선 차트 삽입 완료")

# ⑥ 원형 차트: 항목별 비율 (마지막 행 기준 매출·비용·순이익 비율)
pie_chart = PieChart()
pie_chart.title = "최근 월 매출 구성"
pie_chart.width  = 12
pie_chart.height = 10

pie_data = Reference(ws, min_col=2, max_col=4, min_row=max_row, max_row=max_row)
pie_labels = Reference(ws, min_col=2, max_col=4, min_row=1, max_row=1)
pie_chart.add_data(pie_data, titles_from_data=False)
pie_chart.set_categories(pie_labels)
pie_chart.dataLabels = DataLabelList()
pie_chart.dataLabels.showPercent = True
ws.add_chart(pie_chart, "P2")   # 막대 차트 옆쪽에 배치
print(f"  ✔ 원형 차트 삽입 완료")

# ⑦ 저장
wb.save(OUTPUT_PATH)
print(f"\n✅ 완료! 대시보드 저장 → {OUTPUT_PATH}")

4단계: 실행 방법

  1. 코드 ① 설정의 INPUT_PATH에 원본 데이터 엑셀 경로를 입력합니다.
  2. OUTPUT_PATH에 차트가 삽입된 결과를 저장할 경로를 입력합니다.
  3. 데이터 열 구조가 다르다면 코드 ④~⑥의 min_col, max_col 값을 본인 데이터에 맞게 조정합니다.
  4. 터미널에서 아래 명령어로 실행합니다:
python excel_dashboard.py

정상 실행 시 터미널에 이렇게 출력됩니다:

  ✔ 데이터 로드 완료: 4행
  ✔ 막대 차트 삽입 완료
  ✔ 꺾은선 차트 삽입 완료
  ✔ 원형 차트 삽입 완료

✅ 완료! 대시보드 저장 → C:\Users\내이름\Desktop\대시보드.xlsx

결과 파일을 엑셀에서 열면 데이터 표 옆에 막대·꺾은선·원형 차트 3개가 자동으로 배치되어 있습니다. 차트를 더블클릭하면 일반 엑셀 차트처럼 색상, 종류, 범례를 직접 수정할 수 있습니다.


5단계: 자주 발생하는 오류와 해결법

오류 1: 차트가 빈 화면으로 나오거나 데이터가 표시 안 됨

Referencemin_row, max_row, min_col, max_col이 실제 데이터 범위와 다른 경우입니다. ws.max_rowws.max_column 값을 출력해서 실제 데이터 크기를 먼저 확인하세요.

오류 2: 차트가 표 데이터를 가리며 겹쳐서 표시됨

ws.add_chart(chart, "F2")의 위치 셀 주소가 데이터 영역과 겹치는 경우입니다. 데이터가 A~D열까지 있다면 F열 이후로 차트를 배치해야 겹치지 않습니다.

오류 3: 한글 차트 제목이 깨짐

openpyxl은 한글을 기본 지원하므로 거의 발생하지 않습니다. 만약 깨진다면 코드 파일 저장 시 인코딩이 UTF-8인지 다시 확인하세요.


응용: 차트 색상과 범례 위치 커스터마이징

차트의 색상이나 범례 위치를 세밀하게 조정할 수 있습니다.

from openpyxl.chart.legend import Legend
from openpyxl.drawing.colors import ColorChoice

# 범례를 차트 하단에 배치
bar_chart.legend.position = "b"   # t=상단, b=하단, l=좌측, r=우측

# 막대 색상을 시리즈별로 지정
bar_chart.series[0].graphicalProperties.solidFill = "4A90D9"   # 매출: 블루
bar_chart.series[1].graphicalProperties.solidFill = "E84C3D"   # 비용: 레드
bar_chart.series[2].graphicalProperties.solidFill = "2ECC71"   # 순이익: 그린
💡 이전 게시글과 결합하면: 피벗 테이블 자동 생성 편으로 만든 집계 데이터를 이 코드로 차트화하면 데이터 가공부터 시각화까지 완전 자동화된 보고서를 만들 수 있고, 이메일 자동 발송 편과 결합하면 대시보드 파일을 자동으로 발송할 수 있습니다.

핵심 요약

  • 준비물: Python + openpyxl + pandas 설치 (pip install openpyxl pandas)
  • 설정: INPUT_PATH, OUTPUT_PATH, SHEET_NAME, 차트 데이터 범위 수정
  • 실행: 터미널에서 python excel_dashboard.py 입력
  • 결과: 막대·꺾은선·원형 차트가 포함된 엑셀 대시보드 자동 생성, 엑셀에서 직접 수정 가능

이 코드를 응용하면 영역 차트, 콤보 차트(막대+꺾은선), 스파크라인을 추가하는 것도 가능합니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁