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

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

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

1
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의 기본적인 사용 방법에 대해 알아보았습니다.