2016-03-28 3 views
-1

Я бы хотел экспортировать более 2 000 000 строк в excel (в будущем он станет больше). Один лист обрабатывает 1 048 576 строк. Я хотел бы поставить 300 000 на каждый лист (чтобы excel мог работать должным образом).HUGE экспорт данных в Excel. Несколько листов. Delphi

Я попытался создать объект OLE для размещения данных на разных листах. Он работал для небольшого числа данных, но потребовалось слишком много времени, и это вызвало ошибку при большом количестве данных. Затем я попробовал компонент экспорта в excel, и потребовалось меньше времени, но я не знаю, как распределять данные на листах в этом случае. Использование SQL для распространения на листах вызывает ошибку заполнения памяти.

Можете ли вы предложить другие способы?

+0

, который экспортировал компонент, вы попробовали? Вы просили поставщика компонентов, как вы можете распространять данные на листах? есть собственный компонент excel для Delphi, он может напрямую записывать данные в файл Excel. – sddk

+0

нет, я этого не делал. Я думаю, что попробую массив. спасибо за ответ – 91Violet

ответ

3

Мы не можем видеть ваш код, но мы можем только представить, что вы пишете одну ячейку за раз. Вместо этого вы должны сделать следующее:

  1. Поместите все ваши данные в массив вариантов.
  2. Создайте объект Excel Range, содержащий диапазон заполняемых ячеек.
  3. Назначьте свой массив вариантов этому объекту Range.

Это эффективный способ выполнения назначения блоков с использованием автоматизации Excel.

Кроме того, автоматизация Excel, вероятно, не самый эффективный способ генерации файлов Excel. Вы лучше генерируете файлы напрямую, не прибегая к приложению Excel. Для очень больших файлов наиболее эффективным форматом для записи и чтения является двоичный формат OpenXML с расширением .xlsb. Либо найдите компонент для создания таких файлов, либо напишите свой собственный код в спецификации формата OpenXML.

+0

Спасибо, Дэвид, полезный совет. – 91Violet

+1

Я обнаружил, что для создания очень больших файлов Excel, сохранения данных в файл csv с разделителями-запятыми, а затем загрузка этого файла в Excel в несколько раз быстрее, чем загрузка файла непосредственно в массив вариантов. – lkessler

+0

массив переменных llkessler должен быть медленным. Но я бы не рекомендовал это вообще. –