Как просканировать все ячейки листа

Я хочу сканировать ячейки листа Excel, используя win32com для python, и сохранить словарь местоположения ячеек и их значений.

Есть ли эффективный способ сканирования листа? Это означает, что нужно сканировать как можно меньше ячеек, но при этом сканировать все ячейки с данными/значениями и игнорировать удаленные ячейки.

Раньше я использовал openpyxl, и у него были параметры self.max_row и self.max_column для каждого листа. Есть ли аналогичный параметр или хороший способ их расчета?


person Ran S    schedule 28.12.2015    source источник
comment
Раньше я использовал openpyxl, и у него были параметры self.max_row и self.max_column для каждого листа. Есть ли аналогичный параметр или хороший способ их расчета?   -  person Ran S    schedule 28.12.2015
comment
Почему бы вам просто не использовать openpyxl?   -  person steinar    schedule 28.12.2015
comment
Он не хранит валидаторы и изображения рабочей книги. Также он не поддерживает вставку новых строк, и очень сложно обновить формулы Excel при добавлении новой строки вручную с помощью openpyxl.   -  person Ran S    schedule 28.12.2015


Ответы (1)


Как насчет того, чтобы попробовать что-то подобное...

end_row = ActiveSheet.UsedRange.Rows.Count
end_column = ActiveSheet.UsedRange.Columns.Count

Если у вас есть очень большой диапазон, который вы планируете пройти, я бы посоветовал попытаться свести к минимуму переходы туда и обратно через уровни COM, одновременно перенеся диапазон ячеек в Python.

Я задокументировал некоторые вещи, с которыми столкнулся некоторое время назад здесь.

Основные советы из моего предыдущего письма:

# Take many values at once rather than reading each individually
end_num = sh.UsedRange.Rows.Count
col_a = sh.Range(xl.Cells(1, 1), xl.Cells(end_num, 1)).Value

# The magic numbers to turn calculation on and off
xlCalculationManual = -4135
xlCalculationAutomatic = -4105

# Turn calculation to manual
xl.Calculation = xlCalculationManual

# Turn screen updating off
xl.ScreenUpdating = False

# RUN YOUR CODE HERE #

# Turn things back on when done
xl.ScreenUpdating = True
xl.Calculation = xlCalculationAutomatic
person clutton    schedule 29.12.2015
comment
Я использовал last_col = xlApp.ActiveCell.SpecialCells(constants.xlLastCell).Column last_row = xlApp.ActiveCell.SpecialCells(constants.xlLastCell).Row для получения последней ячейки. Я воспользуюсь советом по переносу диапазона ячеек в python. - person Ran S; 03.01.2016
comment
Обратите внимание, что вы можете использовать технику, упомянутую в моем ответе на stackoverflow.com/questions/23290216/ для импорта констант - person Oliver; 05.01.2016