▶ 셀 범위 지정으로 셀 값 읽고 쓰기 (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인 것을 볼 수가 있다.
정리하면, 코드 worksheet['A1:F6']로 2차원의 tuple을 얻게 되며, 셀들은 가로 방향을 기준으로 반환된다.
이제 아래의 코드를 추가해 각 셀의 값을 표시해 본다. 단, 셀에 값이 저장되어 있지 않다면, 해당 셀은 건너 뛴다.
for cells_row in cells:
for cell in cells_row:
if cell.value:
print(cell.coordinate, cell.value)