Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OpenXML SpreadsheetDocument SaveAs()提供文件正在使用错误_C#_Excel_Openxml_Openxml Powertools - Fatal编程技术网

C# OpenXML SpreadsheetDocument SaveAs()提供文件正在使用错误

C# OpenXML SpreadsheetDocument SaveAs()提供文件正在使用错误,c#,excel,openxml,openxml-powertools,C#,Excel,Openxml,Openxml Powertools,我正在尝试使用OpenXMLPowerTools v4.5.3.2、DocumentFormat.OpenXML v2.9.1动态生成Excel电子表格,该电子表格是从ASP.Net核心web应用程序调用的 我已验证是否能够生成电子表格 问题是我需要生成电子表格。。。并将其作为内存流返回(因此ASP.Net核心web控制器 HCExcelReport.cs: class HCExcelReport { protected SpreadsheetDocument do

我正在尝试使用OpenXMLPowerTools v4.5.3.2、DocumentFormat.OpenXML v2.9.1动态生成Excel电子表格,该电子表格是从ASP.Net核心web应用程序调用的

我已验证是否能够生成电子表格

问题是我需要生成电子表格。。。并将其作为内存流返回(因此ASP.Net核心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;
class报告
{
受保护的电子表格文件;
受保护的内存分发表ms;
受保护的字符串tmpFile=System.IO.Path.GetTempFileName();
公共内存流生成(列出候选记录)
{
MemoryStream MemoryStream=null;
使用(OpenXmlMemoryStreamDocument streamDoc=OpenXmlMemoryStreamDocument.CreateSpeedsheetDocument())
{
doc=streamDoc.GetSpreadsheetDocument();
ms=新的内存分发表();
...
//保存到磁盘=
SaveAs(tmpFile);//请看这篇文章


关于marcel

请看这篇文章,在文件被另一个进程使用时复制它。marcelThank you,但我最终放弃了OpenXMLPowerTools。它不应该不必要地将文件“锁定”,我也不应该采取“极端措施”(如链接中引用的使用卷影复制服务(VSS))。您的解决方案(fs.CopyTo())没有那么激烈…但它仍然没有必要。无论如何,谢谢您。让我“接受”您的答复:)
// Copy to memory stream
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    memoryStream  = new MemoryStream();
    fs.CopyTo(memoryStream );
    fs.Close();
}
return memoryStream;