Python으로 OpenPyXL 모듈을 사용해 엑셀 파일을 다루는 방법을 알아보도록 하겠습니다.
OpenPyXL 모듈 설치하기
$ pip3 install openpyxl
엑셀 파일 쓰기
모듈 설치가 완료되었으면 OpenPyXL 홈페이지에 있는 샘플 코드를 작성하여 엑셀 파일을 생성해 보도록 하겠습니다.
from openpyxl import Workbook
wb = Workbook()
# grab the active worksheet
ws = wb.active
# Data can be assigned directly to cells
ws['A1'] = 42
# Rows can also be appended
ws.append([1, 2, 3])
# Python types will automatically be converted
import datetime
ws['A2'] = datetime.datetime.now()
# Save the file
wb.save("sample.xlsx")
샘플 코드를 작성하고 파일을 실행하면 해당 파일이 존재하는 위치에 sample.xlsx 파일이 생성되는 것을 확인하실 수 있습니다.
엑셀 파일 읽기
파일 읽기를 테스트하기 위해서 2개의 시트가 포함된 엑셀 파일을 생성하였습니다.
ASheet
이름 | 나이 |
길동 | 30 |
철수 | 20 |
영희 | 10 |
BSheet
A | 65 |
B | 66 |
C | 67 |
D | 68 |
import openpyxl
wb = openpyxl.load_workbook("./Test.xlsx")
for sheetName in wb.sheetnames:
sheet = wb[sheetName]
print(sheetName)
for row in range(1, sheet.max_row + 1):
result = []
for col in range(1, sheet.max_column + 1):
result.append(sheet.cell(row, col).value)
print(result)
Test.xlsx 파일을 읽고 해당 파일에 존재하는 시트를 순차적으로 확인하는 코드입니다.
$ python excel.py
ASheet
['이름', '나이']
['길동', 30.0]
['철수', 20.0]
['영희', 10.0]
BSheet
['A', 65.0]
['B', 66.0]
['C', 67.0]
['D', 68.0]
값이 아닌 수식이 읽히는 경우
위에서 사용한 코드는 각 셀에 수식이 있을 경우 값이 아닌 수식을 읽어오게 되어있습니다.
만약 수식이 아닌 값을 읽어오기를 바라는 경우에는 엑셀 파일을 읽을 때 data_only 값을 지정해 주어야 합니다.
# 셀(cell)에 수식이 있을 경우 수식을 가져옵니다.
wb = openpyxl.load_workbook("./Test.xlsx")
# 셀(cell)에 표시되는 값을 가져옵니다.
wb = openpyxl.load_workbook("./Test.xlsx", data_only=True)