70

我正在编写一个生成 excel 报告的程序,目前使用 Microsoft.Interop.Excel 参考。我的开发计算机上有 Excel,但最终用户可能安装了也可能没有安装 Office。如果最终用户计算机上未安装 Office,此工具是否会失败,或者此互操作服务是否与实际应用程序分开?

4

7 回答 7

43

如果您对制作 .xlsx(Office 2007 及更高版本)文件感兴趣,那么您很幸运。Office 2007+ 使用 OpenXML,由于缺乏更贴切的描述,它是名为 .xlsx 的 zip 中的 XML 文件

取一个 excel 文件 (2007+) 并将其重命名为 .zip,您可以将其打开并查看。如果您使用的是 .NET 3.5,您可以使用 System.IO.Packaging 库来操作关系和 zipfile 本身,并使用 linq to xml 来使用 xml(或者如果您更舒服,也可以使用 DOM)。

否则 id 推荐DotNetZip,一个用于处理 zip 文件的强大库。

OpenXMLDeveloper有很多关于 OpenXML 的资源,您可以在那里找到更多。

如果您想要 .xls(2003 及以下),您将不得不查看第 3 方库,或者自己学习文件格式以在不安装 excel 的情况下实现这一目标。

于 2010-04-16T17:41:52.043 回答
38

除非您在服务器/PC 上安装了 Excel 或使用外部工具(不使用 Excel 互操作也可以,请参阅从 C# 创建 Excel(.XLS 和 .XLSX)文件),否则将失败使用互操作需要安装 Excel。

于 2010-04-16T17:24:51.060 回答
31

如果您使用 Excel 2007,请尝试EPPlus。支持范围、单元格样式、图表、形状、图片和许多其他内容

于 2010-04-16T19:13:26.733 回答
13

有几个选项:

  • NPOI - 免费且开源。
  • Aspose - 绝对不是免费的,但很强大。
  • Spreadsheet ML - 基本上是用于创建电子表格的 XML。

使用 Interop 需要在运行它的机器上安装 Excel。在服务器端解决方案中,这将是可怕的。相反,您应该使用类似于上述工具的工具,该工具可让您在不安装 Excel 的情况下构建 Excel 文件。

如果用户没有 Excel,但有一个可以读取 Excel 的工具(如 Open Office),那么显然他们将能够打开它。Microsoft 为没有 Excel 的用户提供免费的Excel 查看器

于 2010-04-16T17:28:18.380 回答
11

互操作调用其他东西,它是互操作性程序集,因此您正在与某些东西进行互操作……在本例中为 Excel,即实际安装的 Excel。

在这种情况下是的,它将无法运行,因为它依赖于 excel,您只是在调用 excel 函数。如果他们没有安装它......运气不好。

有一些方法可以不用Excel生成,只要2007文件格式没问题,这里有几个:

正如我所说,这是2007 格式,通常情况下,如果有的话,那就是交易破坏者。

于 2010-04-16T17:28:00.160 回答
8

使用 OleDB,您可以非常轻松地创建、读取和编辑 Excel 文件。阅读 MSDN 文档了解更多信息:

http://msdn.microsoft.com/en-us/library/aa288452(VS.71).aspx

我使用 OleDB 从 excel 文件中读取数据,我知道您可以创建它们,但我还没有亲身体验过。

于 2010-04-16T17:32:33.920 回答
4

您可以使用FileHelpers库的 ExcelStorage 类,它非常简单……您需要在机器上安装 Excel 2000 或更高版本。

FileHelpers 是一个免费且易于使用的 .NET 库,用于从文件、字符串或流中的固定长度或分隔记录导入/导出数据。

于 2010-04-16T17:28:39.190 回答