프로그래밍/Python

[Python] 엑셀 파일의 특정 영역의 자료들 수정하기

채윤아빠 2023. 1. 18. 09:11
728x90
반응형

개요

이번 글에서는 엑셀 파일을 열어서 특정 영역의 자료들를 수정하는 방법을 알아보겠습니다.

기초적인 내용은 앞 글을 참고하시기 바랍니다.


특정 영역에 대한 자료 입력 방법

아래 코드는 (B2 = 2, 2) ~ (C4 = 4, 3) 특정 영역의 데이터를 주어진 데이터로 수정하는 예제입니다.

import openpyxl

# 엑셀 파일 열기
workbook = openpyxl.load_workbook('example.xlsx')

# 이전에 만든 시트 선택
sheet = workbook['create1']

# 수정할 2차원 배열
data = [[35, '여성'],
        [41, '여성'],
        [51, '여성']]

# 수정할 데이터 개수
row_count, col_count = len(data), 0
if (row_count > 0):
    col_count = len(data[0])

# 시트에서 수정할 구역 (1부터 시작함)
row_no, col_no = 2, 2

# 특정 영역 데이터 수정
for row_index, row in enumerate(sheet.iter_rows(min_row = row_no, max_row = row_no + row_count - 1
                , min_col = col_no, max_col = col_no + col_count - 1, values_only = True)):
    for col_index, value in enumerate(row):
        row_value = data[row_index][col_index]
        sheet.cell(row = row_no + row_index, column = col_no + col_index, value = row_value)
        # sheet.cell(row = row_no + row_index, column = col_no + col_index).value = row_value

# 최초 활성시트 변경
workbook.active = sheet

# 엑셀 파일 저장
workbook.save('example.xlsx')

가장 중요한 함수가 "sheet.iter_rows()" 함수입니다. 이 함수를 통하여, 특정 영역 내의 셀들을 접근할 수 있습니다.

iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)

row (행 : 1, 2, ...) 및 col (열 : A, B, ...) 좌표는 1부터 시작되는 좌표입니다. 엑셀에서 열 좌표는 "A", "B", ... 인데, "A = 1", "B = 2", ... 식으로 입력하면 됩니다.
즉, "sheet.iter_rows()" 함수에 특정한 사각형 영역에 대한 좌표를 입력할 때, 좌측 상단 좌표를 min에 입력하고, 우측 하단의 좌표를 max에 입력하게 됩니다.

위 예제를 실행하면 다음과 같이 왼쪽에 보이는 데이터가 오른쪽과 같이 변경됩니다.


참고자료