어제 오늘 내일

[Python 실전] 16. "엑셀 노가다 완벽 해방!" openpyxl로 파이썬에서 엑셀 다루기 본문

IT/Python

[Python 실전] 16. "엑셀 노가다 완벽 해방!" openpyxl로 파이썬에서 엑셀 다루기

hi.anna 2026. 4. 14. 00:53

 

매달 말일마다 부서별로 흩어진 수십 개의 엑셀 파일을 열어서 하나의 시트로 합치거나, 특정 서식을 복사 붙여넣기 하는 작업을 해보신 적 있나요? 사람이 직접 하면 눈도 아프고 실수하기도 쉽습니다.

하지만 파이썬의 openpyxl 패키지를 사용하면 엑셀을 켜지 않고도 백그라운드에서 순식간에 데이터를 쓰고, 읽고, 서식까지 지정할 수 있습니다.


1. 준비 운동: 패키지 설치와 엑셀의 3단 구조 이해하기

먼저 터미널(명령 프롬프트)을 열고 외부 패키지를 설치해 줍니다.

pip install openpyxl

파이썬으로 엑셀을 다루기 전에 반드시 알아야 할 엑셀의 3단 구조가 있습니다.

  1. 워크북 (Workbook): 엑셀 파일 그 자체 (.xlsx)
  2. 워크시트 (Worksheet): 파일 안 하단에 있는 탭 (Sheet1, Sheet2...)
  3. 셀 (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를 붙여주어야 합니다. 초보자들이 가장 많이 하는 실수입니다!


📝 마치며

오늘의 핵심 요약입니다.

  1. openpyxl.Workbook(): 완전히 새로운 빈 엑셀 파일을 하나 만든다.
  2. openpyxl.load_workbook("파일명.xlsx"): 이미 있는 엑셀 파일을 파이썬으로 불러온다.
  3. ws.append(리스트): 엑셀 시트의 맨 아랫줄에 데이터를 한 줄(행) 전체로 깔끔하게 밀어 넣는다.
  4. 셀.value: 셀 상자 안에 들어있는 진짜 데이터 값을 꺼낸다.

이제 여러분은 파이썬으로 크롤링을 하고(requests, BeautifulSoup), 그 결과를 엑셀 파일(.xlsx)로 저장해 팀원들에게 자동으로 공유할 수 있는 엄청난 능력을 갖추게 되었습니다.

길고 길었던 파이썬 정복 시리즈도 어느덧 마지막을 향해 달려가고 있습니다.
다음 포스팅에서는 대망의 마지막 프로젝트, "날씨 정보를 내 카톡으로? 공공데이터 API 연동 기초"를 다루어 보겠습니다. 남이 정성껏 만들어둔 데이터를 가장 안전하고 확실하게 가져오는 API의 세계로 초대합니다.

도움이 되셨다면 좋아요와 댓글 부탁드립니다! 🐍

반응형
Comments