Я использую 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-файлы:)
спасибо.