2016-12-31 102 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