[python] openpyxl로 엑셀 파일 다루기 – 1. 기본

openpyxl은 파이썬으로 엑셀을 조작 할 수 있는 라이브러리 입니다.
엑셀을 조작할 수 있는 많은 기능을 제공해주지만 이번 글에서는 openpyxl의 제일 기본적인 사용법에 대해 알아보겠습니다.
openpyxl을 사용하기 위해선 아래 명령어를 통해 설치되어야 합니다.

pip install openpyxl

openpyxl에서 제공하는 Workbook, Worksheet, Cell 객체는 아래와 같이 인지하시면 됩니다.

Workbook

1. 엑셀 만들기

엑셀 생성하는 방법은 매우 간단합니다.
Workbook 객체를 생성한 뒤 save를 하면 됩니다.

from openpyxl import Workbook

wb = Workbook()
wb.save("test.xlsx")
# wb.save(r"C:\Users\Son\Desktop\test.xlsx") # 경로 입력 가능

save 함수를 호출하지 않으면 저장을 하지 않습니다. 항상 저장을 위해 코드 마지막에 save를 호출해줍니다.

2. 기존 엑셀 로드

위 코드처럼 Workbook 객체 생성 후 save 함수를 호출하면 기존에 존재하는 엑셀 파일에 덮어쓰기를 합니다.
기존 엑셀 파일을 로드하려면 load_workbook 함수를 사용합니다.

from openpyxl import Workbook
from openpyxl import load_workbook
wb : Workbook = load_workbook("test.xlsx")
# wb : Workbook = load_workbook(r"C:\Users\Son\Desktop\test.xlsx") # 경로 입력 가능

wb.save("test.xlsx")

load_workbook 함수는 파일이 없다면 FileNotFoundError 에러를 발생 시킵니다.

아래 코드처럼 try-except-else 구문을 사용해서 에러를 피해가는 방법이 있습니다.

# 엑셀 로드
from openpyxl import Workbook
from openpyxl import load_workbook
try:
    wb : Workbook = load_workbook("test.xlsx")
except Exception as e:
    print(e)
else:
    print("do something job")
    wb.save("test.xlsx")

Worksheet

1. 모든 Worksheet 목록 읽어오기 

Workbook 에 존재하는 모든 Sheet 목록을 읽어오려면 sheetnames 함수를 사용하시면 됩니다.

from openpyxl import Workbook
from openpyxl import load_workbook

wb : Workbook = load_workbook("test.xlsx")
print(wb.sheetnames) # 전체 시트 목록 보기

wb.save("test.xlsx")

Workbook을 생성하면 기본적으로 Sheet라는 이름을 가진 Worksheet가 존재합니다.

2. Worksheet 생성하기

기본적으로 생성된 Sheet를 사용해도 되지만 Worksheet를 하나 생성해보겠습니다.
생성을 하려면 create_sheet 함수를 사용하면 됩니다.

from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import load_workbook

wb : Workbook = load_workbook("test.xlsx")
print(wb.sheetnames)
ws : Worksheet = wb.create_sheet("새 시트")
print(wb.sheetnames)
wb.save("test.xlsx")

목록을 보면 아래와 같이 새 시트가 생성된 것을 볼 수 있습니다.

3. Worksheet 삭제하기

삭제를 하시려면 remove_sheet 함수를 사용하면 됩니다.

# 시트 삭제
from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import load_workbook

wb : Workbook = load_workbook("test.xlsx")
print(wb.sheetnames)
ws : Worksheet = wb.remove_sheet(wb["새 시트"])
print(wb.sheetnames)
wb.save("test.xlsx")

4. 이름으로 Worksheet 객체 얻기

위 코드로 Sheet 이름을 알게 되었다면 아래와 같이 이름으로 Worksheet 객체를 얻을 수 있습니다.

from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import load_workbook

wb : Workbook = load_workbook("test.xlsx")
ws : Worksheet = wb["Sheet"]
print(ws.title) # 시트 이름 보기
wb.save("test.xlsx")

5. 활성된 Worksheet 객체 얻기

활성된 Sheet를 얻는 방법도 제공합니다.

from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import load_workbook

wb : Workbook = load_workbook("test.xlsx")
ws : Worksheet = wb.active
print(ws.title) # 활성화된 시트 이름 보기
wb.save("test.xlsx")

Cell

1. Cell 접근 1

Worksheet 객체를 얻었다면 Cell에 접근할 수 있습니다.
Worksheet 객체의 cell 함수를 이용하여 Cell 객체를 받아오는 방식이 있습니다.

from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import load_workbook
from openpyxl.cell import Cell

wb : Workbook = load_workbook("test.xlsx")
ws : Worksheet = wb.active
cell : Cell = ws.cell(row=1, column=1)

print(cell.value)
cell.value = "1, 1"
print(cell.value)

wb.save("test.xlsx")

value에 값을 입력하면 엑셀에 입력된 것을 볼 수 있습니다.

2. Cell 접근 2

다른 방식으로는 대괄호에 좌표를 입력하는 방식이 있습니다.

from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import load_workbook
from openpyxl.cell import Cell

wb : Workbook = load_workbook("test.xlsx")
ws : Worksheet = wb.active
cell : Cell = ws["B1"]

print(cell.value)
cell.value = "Row 1, Column B"
print(cell.value)

wb.save("test.xlsx")

3. Cell 정보 얻기

Cell 객체에서 셀에 대한 정보를 얻을 수 있습니다.

from openpyxl import Workbook
from openpyxl.worksheet.worksheet import Worksheet
from openpyxl import load_workbook
from openpyxl.cell import Cell

wb : Workbook = load_workbook("test.xlsx")
ws : Worksheet = wb.active
cell : Cell = ws["B1"]

print(cell.row) # 행
print(cell.column) # 열
print(cell.coordinate) # 좌표
print(cell.value) # 값

wb.save("test.xlsx")

위와 같이 셀의 행, 열, 좌표, 값 정보를 얻을 수 있습니다.

이상으로 openpyxl의 기본적인 사용 방법에 대해 알아보았습니다.