2014-01-24 3 views
3

У меня есть большая проблема с файлами python, openpyxl и Excel. Моя цель - записать некоторые вычисленные данные в предварительно сконфигурированный шаблон в Excel. Я загружаю этот шаблон и записываю данные на него. Есть две проблемы:openpyxl: запись больших файлов excel с помощью python

  1. Я говорю о написании книг Excel с более чем 2 миллионами ячеек, разделенных на несколько листов.
  2. Я делаю это успешно, но время ожидания немыслимо.

Я не знаю другого способа решить эту проблему. Возможно, openpyxl не является решением. Я попытался написать в xlsb, но я думаю, что openpyxl не поддерживает этот формат. Я также пытался с оптимизированным писателем и читателем, но проблема возникает, когда я сохраняю из-за больших данных. Однако размер выходного файла не более 10 МБ. Я очень зациклен на этом. Вы знаете, есть ли другой способ сделать это?

Заранее спасибо.

+0

Как насчет того, чтобы попытаться использовать константы массива вместо прямого значения ячейки. Как я слышал, это быстрее, чем манипуляция с ячейками. См. Http://office.microsoft.com/en-us/excel-help/more-arrays-introducing-array-constants-in-excel-HA001087291.aspx?CTT=5&origin=HA001087290. – Wonil

ответ

2

Размер файла на самом деле не является проблемой, когда дело доходит до использования памяти, но количество ячеек в памяти. Ваш прецедент действительно будет толкать openpyxl до пределов на данный момент, который в настоящее время предназначен для поддержки либо оптимизированное чтение, либо оптимизированное письмо, но не оба одновременно. Одна вещь, которую вы можете попробовать, это прочитать в openpyxl с use_iterators=True, это даст вам генератор, который вы можете позвонить от xlsxwriter, который должен иметь возможность написать для вас новый файл. xlsxwriter в настоящее время значительно быстрее, чем openpyxl при создании файлов. Решение не идеально, но оно может сработать для вас.

+0

Это прекрасно, и, как вы сказали, это значительно быстрее. Спасибо, мужик. – DavidRguez

 Смежные вопросы

  • Нет связанных вопросов^_^