OpenXML PowerTools:是否可以将 Excel 电子表格写入 .Net MemoryStream?

OpenXML PowerTools: is it possible to write an Excel spreadsheet to a .Net MemoryStream?

我正在使用 PowerTools 以编程方式创建 Excel 电子表格。

我使用 Nuget 在我的 C#/ASP.Net 核心项目中安装了 PowerTools 4.5.3.2。该项目还使用 DocumentFormat.OpenXml v2.9.1.

我可以生成电子表格 OK。

但是...

我想将完成的电子表格作为 .Net MemoryStream 传回给用户。

我仔细阅读了 https://github.com/OfficeDev/Open-Xml-PowerTools 上的 PowerTools 文档和示例程序。

但就我的生活而言,我还没有看到任何方法可以让 PowerTools 将生成的数据作为 MemoryStream 提供给我。或者,就此而言,任何使 PowerTools 使用我传递给它的 MemoryStream 的方法。

问:有什么建议吗?

注意

我只想:

  1. 我的 ASP.Net 网络控制器调用了一个从头开始生成 .xlsx 电子表格的函数。

  2. 该函数使用 OpenXML PowerTools(因为这似乎是在 .xlsx 中包含数据透视表 Table 的最直接方式)

  3. 一旦函数 returns,控制器需要 return 将 .xlsx 作为 Asp.Net Core FileStreamResult 对象返回到 Web 客户端。

换句话说,我只想从 2(工作)到 3(这就是我被卡住的地方)。我似乎无法 "convert" 将成功创建的电子表格转换为 MVC FileStreamResult 兼容对象,以便控制器传回给调用者。

求助!

不,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:我从来没有解决过这个问题:

我最终放弃了 PowerTools,转而使用全 OpenXml 解决方案。