【问题标题】:How to write an Excel workbook to a MemoryStream in .NET?如何将 Excel 工作簿写入 .NET 中的 MemoryStream?
【发布时间】:2008-10-01 06:54:19
【问题描述】:

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

Microsoft.Office.Interop.Excel.WorkBook 保存选项中的所有选项都采用文件名。

【问题讨论】:

  • 只是想跟进看看以下是否回答了您的问题。
  • @ToddMain 我们在 2014 年,您看到最新的解决方案了吗??
  • @Mahdi Alkhatib,这不是我的问题。

标签: .net excel


【解决方案1】:

我已经使用 PIA 完成了大量工作,并将 Excel 文件存储在文档存储库中并将其流式传输到浏览器,但如果不先将内容写入文件,我无法找到使用 PIA 的解决方案系统优先。

我认为您将不得不忍气吞声,将文件系统作为中介来处理。好消息是您可以给文件一个唯一的名称,如 guid 或使用其他一些 tempfilename 方法(不确定 .net 中是否存在),然后在完成后删除内容。

【讨论】:

    【解决方案2】:

    这可以通过 Open XML SDK 2.0 完成。 Eric White 在Working with In-Memory Open XML Documents 上有一篇关于如何在流中处理 OOXML 文件的精彩文章

    【讨论】:

      【解决方案3】:

      如果您只需要 Excel 的基本功能,您可能希望将工作簿创建为 Html 流。 There is another question on SO that handless this.

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

      【讨论】:

        【解决方案4】:

        另一种选择是使用this 免费库来导出工作簿。工作簿类的保存方法可以采用文件名或流。

        【讨论】:

        • 是的,这与我所说的相同,但在预构建的库中。只要你对 OpenXML 格式没问题,这个库看起来就是要走的路。 (假设您对其质量和性能感到满意)。
        【解决方案5】:

        您可以做到这一点的唯一方法是,如果您准备创建一个自定义对象,该对象允许您存储您想要保留的所有各种数据/公式/vba/links/ole 对象,从您的工作簿到对象,然后将该对象持久保存到内存流。影响使用您的代理对象作为中间人。

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

        使用 Excel 2007 OpenXML 格式,您可以使用工作簿的 BeforeSave 事件来拥有一个自定义方法,该方法首先将 BeforeSave 事件的 Cancel 参数设置为 True,然后序列化生成的 xml 包(代表文件)到内存中的一个对象中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-26
          • 2023-03-15
          • 2017-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多