Скорость получения значений и цвета ячеек Excel в Python
Для работы в Python с Excel использую библиотеку openpyxl.
С помощью кода приведенного ниже считываю xlsx файл, который содержит около 100 тысяч строк.
from openpyxl import load_workbook
wb_n = load_workbook(filename="FULL.xlsx", read_only=True)
ws_n = wb_n["Sheet1"]
Потом я пытаюсь вернуть значения ячейки ws_n['A1'].value.
Проблема состоит с следующем:
- Время получения значения ячейки A1 = 7 ms
- Время получения значения ячейки A100 = 136 ms
- Время получения значения ячейки A1000 = 12.4 ms
Можно заметить, что чем дальше ячейка, тем больше время получения значения и цвета ячейки. Импортировать данные через DataFrame нельзя, т.к. мне необходимо возвращать цвет ячейки.
Есть какой-нибудь способ возвращать свойства ячейки быстрее, может разумно использовать другую библиотеку?
Ответы (2 шт):
Можете попробовать считывать лист Excel частями с помощью библиотеки xlrd. Но я не уверен, что это даст требуемый результат.
import xlrd
wb = xlrd.open_workbook('Путь к файлу.xlsx')
sh = wb.sheet_by_index(0) #лист из книги excel по индексу
#sh = wb.sheet_by_name('name') #лист из книги excel по имени
limit = sh.nrows #количество строк в листе excel
counter = 0 #счётчик
while (counter + 5000) < limit:
for i in range(counter, counter + 5000):
x = sh.row_values(i) #кортеж значений строки, для ячейки - sh.cell_value(row, cell)
counter += 5000
else:
for i in range(counter, limit):
x = sh.row_values(i)
Ссылка на способ получения цветов: https://stackoverflow.com/questions/7991209/identifying-excel-sheet-cell-color-code-using-xlrd-package
Задачу по считыванию excel файла решил следующим образом:
from openpyxl import load_workbook
wb_n = load_workbook(filename="FULL.xlsx", keep_links=False)
ws_n = wb_n["Sheet1"]
Параметр keep_links=False не сохраняет ссылку на внешнюю книгу, т.е. все данные загружает в "память".
Скорость получения значений ячейки сильно возросла.
- Время получения значения ячейки A1 = 0 ms
- Время получения значения ячейки A1000 = 0 ms
- Время получения значения ячейки A70000 = 0.1 ms
Цена этому скорость загрузки файла функцией load_workbook, теперь данные из 10 тыс. строк импортируется около 20 минут.