본문 바로가기

코딩/파이썬과 엑셀

[Python] openpyxl로 엑셀 파일 다루기 009. 셀 범위 지정으로 셀 값 읽고 쓰기 (range of cells)

python : openpyxl : range of cells

▶ 셀 범위 지정으로 셀 값 읽고 쓰기 (range of cells)

셀의 값을 읽거나 쓸 때 그룹 단위로 수행하면 작성하는 코드는 좀 더 간결해 질 수 있다.

 

셀의 범위를 지정하여 그룹 단위로 값을 읽고 쓰는 방법을 설명하기에 앞서 openpyxl의 docs 문서에 기술되어 있는 아래의 내용을 숙지할 필요가 있다.

 

When a worksheet is created in memory, it contains no cells. They are created when first accessed.

 

임의의 worksheet를 만들었다고 해서 worksheet 내 셀도 자동으로 만들어 지는 것은 아니다로 정리할 수 있겠다.

▶ 알파벳, 숫자 및 슬라이싱을 이용한 셀 범위 지정

알파벳, 숫자 및 슬라이싱을 이용해 셀의 범위를 지정할 수 있다.

 

예를 들어 임의 worksheet 내에 저장되어 있는 셀의 값이 아래와 같다면,

 

저장되어 있는 셀 값

 

셀 범위 지정

붉은색 네모 박스에 해당하는 셀들은 다음의 코드로 지정될 수 있다.

 

cells = worksheet['A1:F6']

 

위의 코드에서 cells의 데이터 타입은 tuple이다. 이 cells를 for 문에 대입해서 얻는 데이터 또한 tuple 타입이다.

아래의 코드를 실행한 후 결과를 확인하면,

 

# python 3.9.5
# openpyxl 3.0.7

from openpyxl import load_workbook

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

cells = worksheet['A1:F6']

print(type(cells))
print()

print(cells)
print()

for c in cells:
    print(type(c), c)

 

아래와 같이 데이터 타입은 tuple인 것을 볼 수가 있다.

 

cells = worksheet['A1:F6']의 분해

 

정리하면, 코드 worksheet['A1:F6']로 2차원의 tuple을 얻게 되며, 셀들은 가로 방향을 기준으로 반환된다.

 

반환되는 셀의 방향

 

이제 아래의 코드를 추가해 각 셀의 값을 표시해 본다. 단, 셀에 값이 저장되어 있지 않다면, 해당 셀은 건너 뛴다.

 

for cells_row in cells:
    for cell in cells_row:
        if cell.value:
            print(cell.coordinate, cell.value)

 

셀 값 출력