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 的方法。
问:有什么建议吗?
注意
我只想:
我的 ASP.Net 网络控制器调用了一个从头开始生成 .xlsx 电子表格的函数。
该函数使用 OpenXML PowerTools(因为这似乎是在 .xlsx 中包含数据透视表 Table 的最直接方式)
一旦函数 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 解决方案。
我正在使用 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 的方法。
问:有什么建议吗?
注意
我只想:
我的 ASP.Net 网络控制器调用了一个从头开始生成 .xlsx 电子表格的函数。
该函数使用 OpenXML PowerTools(因为这似乎是在 .xlsx 中包含数据透视表 Table 的最直接方式)
一旦函数 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 解决方案。