본문 바로가기

코딩/파이썬과 엑셀

[Python] openpyxl로 엑셀 파일 다루기 011. 셀 범위 지정으로 셀 값 읽고 쓰기 3 - 행 기준 모든 셀 얻기

python : openpyxl : range of rows

▶ 셀 범위 지정으로 셀 값 읽고 쓰기 3 - 행 기준 모든 셀 얻기

셀의 범위를 지정할 때 행을 기준으로 모든 셀을 얻을 수 있다.

 

행을 기준으로 셀의 범위를 지정하고자 한다면 다음의 코드에서 처럼 알파벳을 제외한 원하는 행에 해당하는 숫자를 사용하면 된다. 참고로 엑셀에서 행은 숫자 1부터 시작한다.

 

cells_row = worksheet['2:3']

 

열과는 다르게 행에 대해선 문자열이 아닌 정수의 값도 사용이 가능하다.

 

cells_row = worksheet[2:3]

 

위의 코드에서 cells_row 변수의 데이터 타입은 tuple로 cells_row 튜플 내에 어떠한 셀이 저장되어 있는지 확인하기 위해 다음의 코드를 실행해 본다.

 

# python 3.9.5
# openpyxl 3.0.7

from openpyxl import load_workbook

workbook = load_workbook('sample.xlsx')
worksheet = workbook.active

cells_row = worksheet['2:3']

print(type(cells_row))
print()

for cell in cells_row:
    print(cell)

cells_row = worksheet[2:3]

print()
print(type(cells_row))
print()

for cell in cells_row:
    print(cell)

 

엑셀 파일 sample.xlsx의 시트 내용이 아래와 같을 때,

 

엑셀 파일 sample.xlsx

 

위의 코드를 실행한 결과 cells_row 변수에는 A2 ~ F2까지의 셀 객체가 저장되어 있고, worksheet['2:3']과 worksheet[2:3]은 동일한 셀 범위를 반환한다.

 

코드 실행 결과

 

행 또한 열에서와 같이 슬라이싱을 통한 둘 이상의 행뿐만 아니라 하나의 행도 지정하는 것이 가능하다.

 

# python 3.9.5
# openpyxl 3.0.7

from openpyxl import load_workbook

workbook = load_workbook('sample.xlsx')
worksheet = workbook.active

cells_row = worksheet['2']

print(type(cells_row))
print()

for cell in cells_row:
    print(cell)

cells_row = worksheet[2]

print()
print(type(cells_row))
print()

for cell in cells_row:
    print(cell)

 

하나의 행만 지정한 결과

 

아래의 그림에서 처럼 코드 상에서 셀 G2에 'Hello 11' 값을 입력하면,

 

셀 추가

 

# python 3.9.5
# openpyxl 3.0.7

from openpyxl import load_workbook

workbook = load_workbook('sample.xlsx')
worksheet = workbook.active

print(worksheet.max_column)
print()

cells_row = worksheet['2']

for cell in cells_row:
    print(cell)

worksheet.cell(2, 7, 'Hello 11')  # 새로운 셀의 값 입력

print()
print(worksheet.max_column)
print()

cells_row = worksheet['2']

for cell in cells_row:
    print(cell)

workbook.save('sample.xlsx')

 

worksheet['2']가 반환하는 셀의 범위도 변경되며, worksheet의 속성 max_column의 값도 6에서 7로 변경됨을 볼 수 있다.

 

max_column 값의 변경