엑셀을 쉽게 다루는 파이썬 모듈 openpyxl
openpyxl은 엑셀 데이터의 읽고, 쓰고, 수정하기, 엑셀 파일을 열고, 수정하고, 저장하기 등등 엑셀로 할 수 있는 모든 것들을 쉽게 할 수 있도록 API를 제공해주는 파이썬 라이브러리입니다. 공식 문서 링크는 다음과 같습니다.
https://openpyxl.readthedocs.io/en/stable/
pip로 설치하는 방법은 다음과 같습니다.
pip install openpyxl
엑셀 데이터 가져오기
이미 있는 엑셀 파일을 가져오기 위해서 openpyxl의 load_workbook 함수를 사용합니다.
from openpyxl import load_workbook
# excel_path = "엑셀파일의경로"
workbook = load_workbook(excel_path)
엑셀 파일은 여러 시트들을 가질 수 있습니다. 특정 시트에 다음과 같은 방법으로 접근할 수 있습니다.
# sheet_name = "시트 이름"
worksheet = workbook[sheet_name]
시트까지는 접근했는데 시트 안에서 특정 셀의 값을 가져오는 방법은 다음과 같습니다.
# i = 행 인덱스
# j = 열 인덱스
cell_value = worksheet.cell(row=i, column=j).value
엑셀에 대해 필요한 작업들을 다 마친 후에는 워크북을 닫아줍니다.
workbook.close()
엑셀 데이터 수정하기
엑셀 데이터를 수정하기 위해 존재하는 엑셀 파일을 위에서 설명한 방법대로 열어줍니다.
from openpyxl import load_workbook
# excel_path = "엑셀파일의경로"
# sheet_name = "시트 이름"
workbook = load_workbook(excel_path)
worksheet = workbook[sheet_name]
이제부터 이 워크시트에 5행5열부터 6행6열까지 총 2*2 개 데이터를 수정해야 하는 상황을 가정하겠습니다.
수정할 새 데이터는 다음과 같습니다.
a b
c d
new_data = [["a", "b"], ["c", "d"]]
2차원 데이터이므로 단순히 이중 포문으로 코드를 만들 수 있습니다.
row_start_index = 5
column_start_index = 5
row_size = 2
column_size = 2
new_data = [["a", "b"], ["c", "d"]]
for row_index in range(0, row_size):
for column_index in range(0, column_size):
worksheet.cell(
row=row_start_index + row_index,
column=column_start_index + column_index,
value=new_data[row_index][column_index],
)
좀 더 유연하게 모든 2차원 리스트에 대해 수정할 수 있는 함수를 만들었습니다.
def update_range(
new_data: list,
excel_path: str,
sheet_name: str,
row_start_index: int,
column_start_index: int,
):
if not new_data:
return
workbook = load_workbook(excel_path)
worksheet = workbook[sheet_name]
row_size = len(new_data)
column_size = len(new_data[0])
for row_index in range(0, row_size):
for column_index in range(0, column_size):
worksheet.cell(
row=row_start_index + row_index,
column=column_start_index + column_index,
value=new_data[row_index][column_index],
)
workbook.save(excel_path)
workbook.close()
데이터를 수정한 후에는 workbook.save(새 엑셀 경로)을 실행해야 저장 완료가 됩니다.
셀의 값들 삭제하기
엑셀 셀의 값들을 행 기준으로 삭제하는 방법입니다. worksheet 의 delete_rows 메소드를 활용합니다.
def delete_rows(excel_path: str, sheet_name: str, index: int = 1, amount: int = 1):
workbook = load_workbook(excel_path)
worksheet = workbook[sheet_name]
worksheet.delete_rows(index, amount)
workbook.save(excel_path)
예를 들어 index = 5, amount = 10 이면 5번째 행부터 14번째 행까지 총 10개의 행이 삭제됩니다.
reference: github repo
최근댓글