파이썬 엑셀 라인 개수 얻기

Posted at 2007/04/06 13:39// Posted in python/pyutils
전체 라인을 검색하는 속도가 매우 느리기 때문에;
이진 탐색 법을 사용합니다. 절반 나눠서 라인이 있는지 체크하고(아래 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()

이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/04/06 13:39 2007/04/06 13:39
Tag ,