2011-01-21 3 views
-1

Я извлекаю большое количество строк около 400 000 + + через DataReader и создаю файл excel с использованием стороннего компонента. Проблема заключается в том, что все 400 000 записей необходимо сначала загрузить в объектную модель (интенсивное использование памяти), прежде чем вызывать метод генерации файла excel.Преобразование большого количества записей в файл excel без использования большого количества памяти

Любое предложение приемлемо о том, как преодолеть это ?, любые ссылки или библиотека будет приветствовать

благодарит

+0

Есть ли CSV опция? Вы можете легко записывать CSV-файлы без использования стороннего компонента. В качестве альтернативы вы можете записать данные в формате XML Excel - не так просто, как CSV, но что-то, что вы могли бы решить самостоятельно. –

+0

Nope csv не является опцией, любые ссылки на тему Как написать в формате Excel будет полезно спасибо – CliffC

+0

Пожалуйста, будьте более конкретны в следующий раз –

ответ

0

Я сделал это в два этапа, Сначала создайте файл csv.
Далее Импортируйте CSV в excel (это можно сделать в .net путем ссылки на офисный объект). В макроэлементе это примерно так:

With ActiveSheet.QueryTables.Add(Connection:= TEXT;C:\mcsv.csv",Destination:=Range("$A$1")) 
     .Name = "mcsv" 
     .TextFileCommaDelimiter = True 
    End With 

Это должно быть вопросом секунды для всего процесса.

0

Вы всегда можете прочитать данные из DataReader построчно и хранить их (т.е. временный файл) - таким образом, избегая их загрузки. Однако, если вы используете сторонний компонент для файла excel, я боюсь, что всегда останется момент, когда все данные останутся в памяти - по крайней мере, перед закрытием документа.

Если производительность является главной целью, я бы подумал о создании документа CSV вручную (что можно легко сделать в потоке, чтобы вы не загружали все данные в память). Насколько я знаю, существует несколько бесплатных реализаций обработки CSV.

0

У меня такая же проблема.

Я записываю данные непосредственно в файл CSV. Это очень быстро, вместо использования сторонних компонентов.

+0

Является ли ваш soution похожим на мой? –

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