C# ClosedXml无法访问已关闭的流

C# ClosedXml无法访问已关闭的流,c#,openxml,memorystream,closedxml,C#,Openxml,Memorystream,Closedxml,当我试图将ClosedXML工作簿(XLWorkbook)保存到内存流时,出现“无法访问封闭流”的问题 public byte[] GetStream() { using (var stream = new MemoryStream()) { Workbook.SaveAs(stream); return stream.ToArray(); } } 据我所知,ClosedX

当我试图将ClosedXML工作簿(XLWorkbook)保存到内存流时,出现“无法访问封闭流”的问题

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

            return stream.ToArray();
        }
    }

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

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


因此,异常不是由于save方法中提供的memorystream造成的,而是源流造成的。确保该流保持可用,直到您要在工作簿上执行的所有操作完成。

您是如何创建该工作簿的?从文件还是从流还是从头开始创建?我是从流(模板excel文件)创建的。我试图从头开始创建一个,但它生成了一个格式错误的excel文件。如果它是从流创建的,我希望您的代码能够使用,这使我相信您的原始流应该是可用的,如中所示,而不是废弃的。@rene您是正确的。似乎处理原始流是问题所在。奇怪的是,工作簿没有对流进行深度复制(也许是为了节省内存空间?)。然而,xlsx仍然损坏,似乎与此有关。你能写一个答案,这样我就可以把它标记为正确的答案吗?确实,处理原始流似乎是个问题,因为工作簿保留了对的引用。如果我从字节[]创建工作簿呢?我在这件事上没有生气case@NickFarsi任何
byte[]
实例进入MemoryStream上的一个ctor,如
newmemoryStream(byteArray)。但是,如果您想将数据保存回同一个数据流,请小心,因为如果您使用该ctor,您的数据流将无法增长。