EPPLus C # создать и записать файл для потоковой передачи в джонки - PullRequest
0 голосов
/ 22 ноября 2018

Я использую EPPlus (выбрано вместо openxml).У меня есть очень специфическая потребность и борьба за поиск решения (это странно, так как я бы предположил, что это будет общим требованием!): Я загружаю множество строк с сервера SQL, затем создаю отчет xlsx и затем потоковую передачу файладо S3.Память в моем случае является дефицитным ресурсом, поэтому передо мной стояла задача потоковой передачи данных с SQL-сервера, создания файла Excel (с некоторым базовым форматированием), а затем копирования файла на S3 - все это с использованием потоковой передачи / разбиения на блоки - поэтому яможет иметь некоторый контроль над использованием памяти.

Я могу без проблем выполнять потоковую передачу с сервера sql, а с S3 - без проблем, теперь проблема заключается в создании файла xlsx без необходимости загрузки всего объекта в память.Большинство примеров выглядят так:

MemoryStream stream = new MemoryStream();
using (ExcelPackage package = new ExcelPackage(stream))
{
    //Here goes the ExcelPackage code etc
    package.Save() or SaveAs etc.
}

Проблема с этим заключается в том, что комментарий «Вот код ExcelPackage и т. Д.» Обычно представляет собой код, повторяющий список данных и записывающий данные в ячейки файла или диапазон ячеек..

Как я могу получить содержимое файла xlsx, перебирая «список» данных и следя за тем, чтобы epplus inst загружал весь файл в память?При тестировании файла с 1000000 строками и 10 столбцами у нас около 90 МБ.Я хотел бы сказать, вытащить 1000 строк с сервера sql, записать строки в epplus, а затем начать потоковую передачу ExcelPackage на S3, в то время как вытащить следующие 1000 строк с сервера sql - мыть, полоскать, повторять ...

Я также очень против того, чтобы вручную создавать открытые XML-файлы:)

спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...