从不带Office的C#创建Excel文件

Create Excel files from C# without office

本问题已经有最佳答案,请猛点这里访问。

我正在编写一个生成Excel报告的程序,当前使用的是microsoft.interop.excel引用。我的开发人员计算机上有Excel,但最终用户可能安装了Office,也可能没有安装。如果最终用户计算机上没有安装Office,或此Interop服务与实际应用程序分离,此工具会失败吗?


如果你对制作.xlsx(Office2007及更高版本)文件感兴趣,那你就走运了。Office2007+使用OpenXML,由于缺少更恰当的描述,它是名为.xlsx的zip中的XML文件

取一个Excel文件(2007+)并将其重命名为.zip,您可以打开它并查看。如果您使用的是.NET 3.5,则可以使用System.IO.Packaging库来处理关系和zipFile本身,以及使用Linq to XML来处理XML(如果您更愿意,也可以使用DOM)。

否则id reccomend dotnetzip,一个用于操作zipfiles的Powerfull库。

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

如果你想要.xls(2003年及以下),你将不得不查看第三方库,或者在没有安装Excel的情况下自己学习文件格式。


除非您在服务器/PC上安装了Excel或使用外部工具(不使用Excel Interop是可能的,请参见从C创建Excel(.xls和.xlsx)文件),否则它将失败。使用interop需要安装Excel。


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


有几种选择:

  • NPOI-免费开放来源。
  • Aspose-绝对是不是自由的,而是健壮的。
  • 电子表格ML——基本上是用于创建电子表格的XML。

使用interop需要将Excel安装在运行它的计算机上。在服务器端解决方案中,这将非常糟糕。相反,您应该使用与上面类似的工具,它允许您在不安装Excel的情况下构建Excel文件。

如果用户没有Excel,但有一个可以读取Excel的工具(如OpenOffice),那么显然他们可以打开它。对于没有Excel的用户,Microsoft提供了免费的Excel查看器。


互操作调用其他东西,它是一个互操作程序集,因此您正在与一些东西交互操作……在本例中是Excel,实际安装的Excel。

在这种情况下,是的,它将无法运行,因为它依赖于Excel,您只是调用Excel函数。如果他们没有安装……那就走运了。

如果2007文件格式正常,则可以使用不带Excel的方法生成,如下所示:

  • http://excelpackage.codeplex.com/
  • http://simpleooxml.codeplex.com/

不过,正如我所说,这是2007年的格式,通常情况下,这是交易破坏者。


使用OLEDB,您可以很容易地创建、读取和编辑Excel文件。有关详细信息,请阅读msdn文档:

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

我用OLEDB读取Excel文件,我知道你可以创建它们,但我还没有直接完成。


您可以使用FileHelpers库的ExcelStorage类,这非常简单…您需要在计算机上安装Excel2000或更高版本。

The FileHelpers is a free and easy to
use .NET library to import/export
data from fixed length or delimited
records in files, strings or streams.