OpenXML PowerTools: можно ли записать электронную таблицу Excel в .Net MemoryStream?

Я программно создаю электронную таблицу Excel с помощью PowerTools.

Я установил PowerTools 4.5.3.2 в свой проект C#/ASP.Net Core с помощью Nuget. В проекте также используется DocumentFormat.OpenXml v2.9.1.

Я могу создать электронную таблицу OK.

НО ...

Я хотел бы передать заполненную электронную таблицу пользователю как .Net MemoryStream.

Я изучил документацию по PowerTools и примеры программ на https://github.com/OfficeDev/Open-Xml-PowerTools.

Но на всю жизнь я не видел никакого способа, чтобы PowerTools предоставил мне сгенерированные данные в виде MemoryStream. Или, если на то пошло, любой способ заставить PowerTools использовать MemoryStream, который я ему передаю.

В: Есть предложения?

ПРИМЕЧАНИЕ

Все, что я хочу сделать, это:

  1. Мой веб-контроллер ASP.Net вызывает функцию, которая создает электронную таблицу .xlsx с нуля.

  2. Функция использует OpenXML PowerTools (поскольку это самый простой способ включить сводную таблицу в .xlsx).

  3. После возврата функции контроллер должен вернуть .xlsx обратно веб-клиенту в виде объекта Asp.Net Core FileStreamResult.

Другими словами, все, что я хочу сделать, это перейти от 2 (работает) к 3 (вот где я застрял). Кажется, я не могу «преобразовать» успешно созданную электронную таблицу в объект, совместимый с MVC FileStreamResult, чтобы контроллер передал обратно вызывающей стороне.

Помощь!


person FoggyDay    schedule 05.05.2020    source источник


Ответы (1)


Нет, не похоже, что OpenXml PowerTools позволит вам записывать что-либо, кроме фактического файла на диске.

Поэтому я использовал временный файл, а затем преобразовал его в массив byte[] для передачи обратно вызывающей стороне:

using (OpenXmlMemoryStreamDocument streamDoc = OpenXmlMemoryStreamDocument.CreateSpreadsheetDocument())
{
    doc = streamDoc.GetSpreadsheetDocument();
    ms = new MemorySpreadsheet();
    ...
    string tmpFile = System.IO.Path.GetTempFileName();
    streamDoc.GetModifiedSmlDocument().SaveAs(tmpFile);
    byte[] fileBytes = System.IO.File.ReadAllBytes(tmpFile);
    return fileBytes;

PS: я так и не решил эту проблему: OpenXML SpreadsheetDocument SaveAs() давая файл ошибка при использовании

В конце концов я отказался от PowerTools и вернулся к решению, полностью основанному на OpenXml.

person FoggyDay    schedule 06.06.2020