我正在使用 PowerTools 以编程方式创建 Excel 电子表格。
我使用 Nuget 在我的 C#/ASP.Net Core 项目中安装了 PowerTools 4.5.3.2。该项目还使用 DocumentFormat.OpenXml v2.9.1。
我可以生成电子表格。
但 ...
我想将完成的电子表格作为 .Net MemoryStream 传回给用户。
我仔细研究了https://github.com/OfficeDev/Open-Xml-PowerTools上的 PowerTools 文档和示例程序。
但是在我的一生中,我还没有看到任何让 PowerTools 将生成的数据作为 MemoryStream 提供给我的方法。或者,就此而言,任何让 PowerTools 使用我传递给它的 MemoryStream 的方法。
问:有什么建议吗?
笔记
我想做的就是:
我的 ASP.Net Web 控制器调用一个从头开始生成 .xlsx 电子表格的函数。
该函数使用 OpenXML PowerTools(因为这似乎是在 .xlsx 中包含数据透视表的最直接方式)
一旦函数返回,控制器需要将 .xlsx 作为 Asp.Net Core FileStreamResult 对象返回给 Web 客户端。
换句话说,我想要做的就是从 2(工作)到 3(这就是我卡住的地方)。我似乎无法将成功创建的电子表格“转换”为与 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:我从来没有解决过这个问题:OpenXML SpreadsheetDocument SaveAs() 给出文件使用错误
我最终放弃了 PowerTools,回到了全 OpenXml 解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句