如何写一个Excel工作簿到.NET中的MemoryStream?

如何在不将其保存到文件系统的情况下将Excel工作簿写入MemoryStream

Microsoft.Office.Interop.Excel.WorkBook保存选项中的所有选项都取一个文件名。

我已经在PIA上做了大量的工作,并将Excel文件存储在文档库中,并将其传输到浏览器中,而且我还没有find一个解决scheme,无需先将内容写入文件系统即可使用PIA。

我认为你将不得不吞下子弹,作为中介处理文件系统。 好消息是,你可以给文件一个独特的名字,像一个GUID或者使用其他的tempfilename方法(不知道是否存在.net),只要删除完成后的内容。

这可以通过Open XML SDK 2.0完成。 Eric White有一篇很好的文章,介绍如何使用内存中的Open XML文档在stream中处理OOXML文件

如果您只需要Excel中的基本function,则可能需要将工作簿创build为Htmlstream。 对于这个问题还有另外一个问题 。

这也解决了您的解决scheme的可扩展性方面的一些问题(您可能还没有)。

另一种select是使用这个免费的库来导出工作簿。 工作簿类上的保存方法可以采用文件名或stream。

唯一的办法就是如果你准备创build一个自定义对象,允许你存储你想要保存的所有不同的数据/公式/ VBA /链接/对象的零件,从工作簿复制到该对象,然后将该对象保存到内存stream中。 在影响使用你的代理对象之间。

没有办法(正如其他人所说的)直接将Excel文件写入内存。

使用Excel 2007 OpenXML格式,可以使用工作簿的BeforeSave事件来创build一个自定义方法,该方法首先将BeforeSave事件的Cancel参数设置为True,然后将生成的xml包(表示文件)串行化为一个对象在记忆中。