Откройте XML PowerTools: можно ли записать электронную таблицу Excel в. Net MemoryStream? - PullRequest
1 голос
/ 05 мая 2020

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

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

Я могу сгенерировать электронную таблицу ОК.

НО ...

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

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

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

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

ПРИМЕЧАНИЕ

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

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

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

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

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

Помогите!

1 Ответ

0 голосов
/ 07 июня 2020

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

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

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: Я никогда не решал эту проблему: Open XML SpreadsheetDocument SaveAs () выдает ошибку использования файла

В конечном итоге я отказался от PowerTools и вернулся к полностью открытому Xml решению.

...