Форум сайта python.su
0
Доброго времени суток.
Стоит задача найти и извлечь содержимое excel ячейки из 22000 строк. Задачу эту решаю через модуль win32com. Пробегаюсь с помощью for по указанному диапазону и извлекаю то что мне нужно, но из-за такого количества строк этот процесс очень долгий около 50секунд, хотя в самом екселе процесс в этом диапазоне занимает пол секунды. Как ускорить это процесс?
Заранее благодарен.
for i in range(1, 22000): val = sheet.Cells(i, 5).value # получаем из книги excel ячеку с телефоном if val == phone: print('Привет')
Офлайн
253
Yuriy_VВсе варинаты сводятся к тому чтобы выкинуть в топку эксел(который должен загрузиться и загрузить файл, что занимает немало времени) и com интерфейсы (которые сами по себе безумно медленные).
этот процесс очень долгий около 50секунд
Офлайн
0
попробуйте выставить в False свойства открытого объекта Visible, ScreenUpdating, DisplayAlerts, EnableEvents. Должно ускорить. Но xlrd всяко быстрее
Офлайн
0
KoVK
попробуйте выставить в False свойства открытого объекта Visible, ScreenUpdating, DisplayAlerts, EnableEvents. Должно ускорить. Но xlrd всяко быстрее
Офлайн
44
https://xlrd.readthedocs.io/en/latest/installation.html
ps я правильно понимаю вы из экселя сделали голема и … рулите им из пайтона … хм
сюда смотрели
https://autoit-script.ru/docs/libfunctions/excel%20management.htm
https://github.com/jacexh/pyautoit
мне ближе вариант
doza_andвот еще один вроде тоже можно попробывать https://pandas.pydata.org/
2. Вариант общий Через com попросите exel экспортировать таблицу в csv. после этого все проблемы уйдут работа с csv быстрая и простая.
и вставьте ссылку на его url Офлайн
0
Yuriy_V
Скорее всего есть метод который бы мог обратиться к столбцу целиком, но не могу его найти в гугле((
Yuriy_V
xlrd быстрее, секунд 40 в место 50, но всё же не пол секунды как при работе в родном Excel
Офлайн
253
Yuriy_V
xlrd быстрее, секунд 40 в место 50
Yuriy_V
содержимое excel ячейки из 22000 строк
import xlrd import time wb=xlrd.open_workbook("out.xlsx") sheet=wb.sheet_by_index(0) t0=time.perf_counter() dat= sheet.col_values(0) t1=time.perf_counter() print(t1-t0) 0.012369728996418417
Офлайн
0
Всем огромное спасибо за подсказки, я воспользовался последним примером от doza_and, сейчас всё просто летает в обработке excel таблицы. Действительно через модуль xlrd реакция на запросы просто мгновенная. Про запросы через COM даже вспоминать теперь не хочется ))
Офлайн