【发布时间】:2020-05-05 19:55:02
【问题描述】:
我正在尝试使用从 ASP.Net Core Web 应用程序调用的 OpenXMLPowerTools v4.5.3.2、DocumentFormat.OpenXML v2.9.1 动态生成 Excel 电子表格。
我已经验证可以生成电子表格了。
问题是我需要生成电子表格......并将其作为 MEMORY STREAM 返回(因此 ASP.Net Core Web 控制器
HCExcelReport.cs:
class HCExcelReport
{
protected SpreadsheetDocument doc;
protected MemorySpreadsheet ms;
protected string tmpFile = System.IO.Path.GetTempFileName();
public MemoryStream Generate(List<CandidateRecords> candidateRecords)
{
MemoryStream memoryStream = null;
using (OpenXmlMemoryStreamDocument streamDoc = OpenXmlMemoryStreamDocument.CreateSpreadsheetDocument())
{
doc = streamDoc.GetSpreadsheetDocument();
ms = new MemorySpreadsheet();
...
// Save to disk=
doc.SaveAs(tmpFile); // <-- Successfully writes .. but file remains open
doc.Dispose(); // <-- file *STILL* remains open
}
// Copy to memory stream
using (FileStream fileStream = new FileStream(tmpFile, FileMode.Open, FileAccess.Read)) // <-- Exception: the file is in use by another process!!!!
{
memoryStream = new MemoryStream();
fileStream.CopyTo(memoryStream);
memoryStream.Position = 0;
}
return memoryStream;
我尝试了无数的东西......
...但是如果我使用 PowerTools,我看不到任何替代 doc.SaveAs()...
...如果我使用doc.SaveAs(),该文件似乎会一直“使用中”,直到我的网络应用退出。
问:有什么建议吗?
【问题讨论】:
-
请看这篇文章 stackoverflow.com/questions/6167136/… 复制一个文件,同时它正在被另一个进程使用问候marcel
标签: c# excel openxml openxml-powertools