반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

 

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

 

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART)나 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 


오늘은 예전에도 겪었던 openpyxl 문제가 다시 발생하여 기록 및 공유 겸 짧게 글을 써보려 합니다.

 

파이썬으로 엑셀을 다루게 해주는 openpyxl 패키지는,

 

시트(sheet)에 존재하는 값이 입력된 가장 마지막 열을 파악해야 할 때, ws.max_row를,

마지막 열이 정확히 어디인지 모르지만 전체 열을 범위로 넣고 싶을 때ws.rows를 사용합니다.

 

그런데 이때 가끔씩 빈 공간을 마치 값이 입력된 것처럼 인식할 때가 있습니다. 없는데 있는 그런 모순된 상황입니다.

 

결론부터 말씀드리면 무엇인가 썼다가 지웠거나, 셀 서식이 들어가 있으면 해당 셀 공간이 빈공간이 아닌 것 처럼 인식합니다.

 

해결 방법은 아래에서 설명드리겠습니다.

 

1. 문제 현상

 

자, 아래에서 예시를 통해서 좀 더 자세히 보여드리겠습니다.

 

아래의 그림을 보시면, 6번행까지 값이 입력되어 있습니다. 단, 7,8,9번행까지 제가 다른 것을 썼다가 지운 상태입니다.

 

테스트용 출석부.xlsx

 

간단한 코드로 ws.rows가 어떻게 사용되고 작동하는지 살펴보겠습니다. 의도한 출력결과는 값이 입력된 마지막 행을 파악하고 그 전의 행들을 모두 출력하는 것입니다. 참고로 여기서 출력하는 것은 값이 아니라 Cell 객체입니다.

 

import  openpyxl

# "출석부.xlsx"라는 이름의 엑셀파일 불러오기
wb = openpyxl.load_workbook("출석부.xlsx")

# 불러운 엑셀파일에서 "1반"이라는 이름을 가진 sheet 가져오기
ws = wb["1반"]

# ws.rows로 가장 마지막 행을 파악, 행을 한줄씩 출력
for  row  in  ws.rows:
    print(row)

 

<정상적인 실행 결과>

 

<잘못된 실행 결과>

 

분명히 아무것도 존재하지 않는데 9번 행을 시트의 마지막 행으로 잡았습니다.

 

 

2. 해결 방법

 

해결 방법은 간단합니다.

 

주변의 진짜 순수한(?) 떼뭍지 않은(?) 셀을 잘라내기해서 문제가 되는 영역에 붙여넣는 것입니다.

 

 


누군가에게 도움이 되었길 기대하며 글을 마칩니다.

 

 

반응형

+ Recent posts