2016-12-31 104 views
3

当我尝试将ClosedXML工作簿(XLWorkbook)保存到内存流时,出现“无法访问已关闭的流”。ClosedXml无法访问已关闭的流

public byte[] GetStream() 
    { 
     using (var stream = new MemoryStream()) 
     { 
      Workbook.SaveAs(stream); 

      return stream.ToArray(); 
     } 
    } 

据我所知,在ClosedXml库中存在一个问题,因为在访问save方法之前创建了流。

+0

您是如何创建该工作簿的?从文件或从一个流或从头创建? – rene

+0

我从流(模板excel文件)创建它。我试图从头开始创建一个,它会生成格式错误的excel文件。 – Andrew

+0

如果它是从流中创建的,我希望你的代码采用[this else](https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLWorkbook.cs#L553),这让我相信你的原始流应该可用,如在,不处理。 – rene

回答

2

这取决于您如何创建工作簿。如果它是从Stream创建的,它将在save操作期间访问该原始流。

所以这个异常不是由于你在save方法中提供的存储流,它是原始流是罪魁祸首。确保您保持该流可用,直到完成了您要在工作簿上执行的所有操作。

+0

事实上,由于Workbook保留了对[原始流]的引用(https://github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/Excel/XLWorkbook.cs#L711),因此处理原始Stream似乎成了问题。 。 – Andrew