我正在编写一个生成 excel 报告的程序,目前使用 Microsoft.Interop.Excel 参考。我的开发计算机上有 Excel,但最终用户可能安装了也可能没有安装 Office。如果最终用户计算机上未安装 Office,此工具是否会失败,或者此互操作服务是否与实际应用程序分开?
7 回答
如果您对制作 .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 的情况下实现这一目标。
除非您在服务器/PC 上安装了 Excel 或使用外部工具(不使用 Excel 互操作也可以,请参阅从 C# 创建 Excel(.XLS 和 .XLSX)文件),否则将失败。使用互操作需要安装 Excel。
如果您使用 Excel 2007,请尝试EPPlus。支持范围、单元格样式、图表、形状、图片和许多其他内容
有几个选项:
- NPOI - 免费且开源。
- Aspose - 绝对不是免费的,但很强大。
- Spreadsheet ML - 基本上是用于创建电子表格的 XML。
使用 Interop 需要在运行它的机器上安装 Excel。在服务器端解决方案中,这将是可怕的。相反,您应该使用类似于上述工具的工具,该工具可让您在不安装 Excel 的情况下构建 Excel 文件。
如果用户没有 Excel,但有一个可以读取 Excel 的工具(如 Open Office),那么显然他们将能够打开它。Microsoft 为没有 Excel 的用户提供免费的Excel 查看器。
互操作调用其他东西,它是互操作性程序集,因此您正在与某些东西进行互操作……在本例中为 Excel,即实际安装的 Excel。
在这种情况下是的,它将无法运行,因为它依赖于 excel,您只是在调用 excel 函数。如果他们没有安装它......运气不好。
有一些方法可以不用Excel生成,只要2007文件格式没问题,这里有几个:
正如我所说,这是2007 格式,通常情况下,如果有的话,那就是交易破坏者。
使用 OleDB,您可以非常轻松地创建、读取和编辑 Excel 文件。阅读 MSDN 文档了解更多信息:
http://msdn.microsoft.com/en-us/library/aa288452(VS.71).aspx
我使用 OleDB 从 excel 文件中读取数据,我知道您可以创建它们,但我还没有亲身体验过。
您可以使用FileHelpers库的 ExcelStorage 类,它非常简单……您需要在机器上安装 Excel 2000 或更高版本。
FileHelpers 是一个免费且易于使用的 .NET 库,用于从文件、字符串或流中的固定长度或分隔记录导入/导出数据。