전체 라인을 검색하는 속도가 매우 느리기 때문에;
이진 탐색 법을 사용합니다. 절반 나눠서 라인이 있는지 체크하고(아래 10줄, 위 10줄)
뭔가 있다면 뒷부분을 검색, 비어있다면 앞부분을 검색합니다.
검색 범위가 2 칸 내로 줄어들면 검색을 종료합니다 ~(-_-)~
win32com.client 을 사용하기 위해서는 파이썬 확장 을 다운로드 받으셔야 합니다.
파이썬 코드는 세일씨가 만든 코드 하일라이팅 을 이용해 변환했습니다. 햐햐 > _<)/
# -*- coding:cp949 -*-
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
class Excel:
def __init__(self, path):
workbooks = excel.Workbooks.Open(path)
sheet = workbooks.ActiveSheet
self.workbooks = workbooks
self.sheet = sheet
def __del__(self):
self.workbooks.Close()
def CalLineCount(self, end = 60000):
"엑셀 테이블 라인 개수 구하기"
sheet = self.sheet
beg = 1
if sheet.Cells(end, 1).Value:
raise RuntimeError, "TOO_BIG_SHEET"
while True:
mid = (beg + end) / 2
if abs(beg - end) < 2:
return mid
if self.__IsValidLineRange(beg, mid, end):
beg = mid + 1
else:
end = mid - 1
def __IsValidLineRange(self, beg, mid, end):
"유효한 라인 대역인가?"
sheet = self.sheet
for row in xrange(max(mid - 10, beg), min(mid + 10, end)):
if sheet.Cells(row, 1).Value:
return True
return False
print Excel("test.xls").CalLineCount()


python 을 좋아하는 게임 프로그래머