| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- java테스트
- string
- HashMap
- ArrayList
- Visual Studio Code
- 단위테스트
- IntelliJ
- vscode
- 스프링부트
- Eclipse
- SpringBoot
- js
- 테스트자동화
- 인텔리제이
- junit
- math
- 문자열
- 배열
- Array
- 자바스크립트
- html
- javascript
- 자바문법
- junit5
- 자바
- 정규식
- list
- input
- Java
- CSS
- Today
- Total
어제 오늘 내일
[Python 실전] 16. "엑셀 노가다 완벽 해방!" openpyxl로 파이썬에서 엑셀 다루기 본문
매달 말일마다 부서별로 흩어진 수십 개의 엑셀 파일을 열어서 하나의 시트로 합치거나, 특정 서식을 복사 붙여넣기 하는 작업을 해보신 적 있나요? 사람이 직접 하면 눈도 아프고 실수하기도 쉽습니다.
하지만 파이썬의 openpyxl 패키지를 사용하면 엑셀을 켜지 않고도 백그라운드에서 순식간에 데이터를 쓰고, 읽고, 서식까지 지정할 수 있습니다.
1. 준비 운동: 패키지 설치와 엑셀의 3단 구조 이해하기
먼저 터미널(명령 프롬프트)을 열고 외부 패키지를 설치해 줍니다.
pip install openpyxl
파이썬으로 엑셀을 다루기 전에 반드시 알아야 할 엑셀의 3단 구조가 있습니다.
- 워크북 (Workbook): 엑셀 파일 그 자체 (
.xlsx) - 워크시트 (Worksheet): 파일 안 하단에 있는 탭 (Sheet1, Sheet2...)
- 셀 (Cell): 데이터를 입력하는 각각의 네모 칸 (A1, B2...)
코드를 짤 때도 항상 "파일을 열고 ➔ 시트를 고르고 ➔ 셀에 값을 넣는다" 순서로 진행됩니다.
2. 무에서 유를 창조하기: 새 엑셀 파일 만들고 데이터 쓰기
아무것도 없는 백지상태에서 새로운 엑셀 파일을 만들고, 특정 칸에 데이터를 집어넣어 보겠습니다.
📌 예제 코드: 새 엑셀 파일 생성하기
import openpyxl
# 1. 워크북(엑셀 파일) 생성하기
wb = openpyxl.Workbook()
# 2. 현재 활성화된 시트(기본 시트) 가져오기
ws = wb.active
# 시트 이름도 내 마음대로 바꿀 수 있습니다.
ws.title = "크롤링_결과"
# 3. 셀에 데이터 입력하기 (A1 셀, B1 셀 지정)
ws["A1"] = "순번"
ws["B1"] = "뉴스 제목"
ws["A2"] = 1
ws["B2"] = "파이썬으로 업무 자동화 성공!"
# 4. 워크북 저장하기 (반드시 마지막에 저장해야 실제 파일이 생깁니다!)
wb.save("news_data.xlsx")
# 작업이 끝났으면 닫아주는 것이 좋습니다.
wb.close()
print("엑셀 파일이 성공적으로 만들어졌습니다.")
코드를 실행하고 폴더를 확인해 보면 news_data.xlsx 파일이 예쁘게 생성된 것을 확인할 수 있습니다.
3. 실무 필수 스킬: 리스트 데이터를 한 줄씩 추가하기 (append)
실무에서는 위처럼 ws["A1"], ws["A2"] 하나하나 주소를 지정해서 데이터를 넣지 않습니다. 지난 시간에 크롤링한 데이터처럼, 수십 개의 데이터가 담긴 리스트(List)를 한 번에 한 줄씩 밀어 넣는 방식을 압도적으로 많이 사용합니다.
이때 사용하는 마법의 함수가 바로 append()입니다.
📌 예제 코드: 여러 줄의 데이터를 엑셀에 한 번에 쓰기
import openpyxl
# 저장할 데이터가 담긴 리스트 (크롤링 결과라고 가정해 봅시다)
crawling_data = [
["날짜", "부서", "매출액"], # 첫 번째 줄 (헤더)
["2026-02-24", "영업1팀", 5000000],
["2026-02-24", "영업2팀", 4500000],
["2026-02-25", "마케팅팀", 3000000]
]
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "매출보고서"
# for문을 돌면서 리스트를 한 줄씩 엑셀의 맨 아랫줄에 추가합니다.
for row in crawling_data:
# 엑셀 시트의 맨 아래 빈 줄에 row(리스트)를 통째로 끼워 넣습니다.
ws.append(row)
wb.save("sales_report.xlsx")
wb.close()
단 4줄의 for문만으로 복잡한 표가 엑셀 파일에 완벽하게 들어갔습니다!
4. 이미 있는 엑셀 파일 불러와서 읽기 (load_workbook)
이번엔 반대로, 컴퓨터에 이미 저장되어 있는 엑셀 파일을 파이썬으로 불러와서 안에 있는 데이터를 읽어보겠습니다.
이 기능은 "특정 단어가 포함된 행만 지우기", "오타 한 번에 수정하기" 같은 매크로 작업을 할 때 필수적입니다.
📌 예제 코드: 엑셀 파일 불러오기
import openpyxl
# 1. 이미 존재하는 엑셀 파일 불러오기
# data_only=True 옵션을 주면 엑셀의 '수식' 대신 계산된 '결과값'만 가져옵니다.
wb = openpyxl.load_workbook("sales_report.xlsx", data_only=True)
# 2. 작업할 시트 이름으로 정확히 찝어서 가져오기
ws = wb["매출보고서"]
# 3. 특정 셀의 값 읽기 (A2 셀)
print("A2 셀의 값:", ws["A2"].value) # 주의: 그냥 ws["A2"]를 출력하면 셀 객체 자체가 나옵니다. 반드시 .value를 붙이세요!
print("-" * 20)
# 4. 시트에 있는 모든 데이터 한 줄씩 꺼내서 보기 (iter_rows 활용)
# min_row=2 를 주면 1번째 줄(헤더)을 건너뛰고 2번째 줄부터 가져옵니다.
for row in ws.iter_rows(min_row=2):
date = row[0].value
team = row[1].value
sales = row[2].value
print(f"{date} | {team} | {sales}원")
wb.close()
💡 .value를 잊지 마세요!ws["A1"]은 "A1이라는 네모 칸(상자)" 자체를 의미합니다. 그 상자 안에 든 내용물을 꺼내려면 반드시 뒤에 .value를 붙여주어야 합니다. 초보자들이 가장 많이 하는 실수입니다!
📝 마치며
오늘의 핵심 요약입니다.
openpyxl.Workbook(): 완전히 새로운 빈 엑셀 파일을 하나 만든다.openpyxl.load_workbook("파일명.xlsx"): 이미 있는 엑셀 파일을 파이썬으로 불러온다.ws.append(리스트): 엑셀 시트의 맨 아랫줄에 데이터를 한 줄(행) 전체로 깔끔하게 밀어 넣는다.셀.value: 셀 상자 안에 들어있는 진짜 데이터 값을 꺼낸다.
이제 여러분은 파이썬으로 크롤링을 하고(requests, BeautifulSoup), 그 결과를 엑셀 파일(.xlsx)로 저장해 팀원들에게 자동으로 공유할 수 있는 엄청난 능력을 갖추게 되었습니다.
길고 길었던 파이썬 정복 시리즈도 어느덧 마지막을 향해 달려가고 있습니다.
다음 포스팅에서는 대망의 마지막 프로젝트, "날씨 정보를 내 카톡으로? 공공데이터 API 연동 기초"를 다루어 보겠습니다. 남이 정성껏 만들어둔 데이터를 가장 안전하고 확실하게 가져오는 API의 세계로 초대합니다.
도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍