如何在不安装 Microsoft Office 的情况下用 C#创建 Excel(.XLS 和. XLSX)文件?

如何在不使用运行代码的计算机上安装 Excel 的情况下使用 C#创建 Excel 电子表格?

答案

您可以使用一个名为 ExcelLibrary 的库。它是发布在 Google Code 上的免费开放源代码库:

ExcelLibrary

这似乎是您上面提到的 PHP ExcelWriter 的端口。它不会写入新的. xlsx 格式,但是他们正在努力添加该功能。

它非常简单,小巧且易于使用。另外,它还有一个 DataSetHelper,可让您使用数据集和数据表轻松处理 Excel 数据。

ExcelLibrary 似乎仍然仅适用于较旧的 Excel 格式(.xls 文件),但将来可能会增加对较新的 2007/2010 格式的支持。

您还可以使用EPPlus ,它仅适用于 Excel 2007/2010 格式的文件(.xlsx 文件)。还有NPOI可以同时使用。

如注释中所述,每个库都有一些已知的错误。总之,随着时间的流逝,EPPlus 似乎是最佳选择。它似乎也得到了更积极的更新和记录。

另外,如下面的 @АртёмЦарионов所述,EPPlus 支持数据透视表,而 ExcelLibrary 可能有一些支持( ExcelLibrary 中的数据透视表问题

这里有几个链接供快速参考:
ExcelLibrary - GNU 次级 GPL
EPPlus - GNU 较小公共通用许可证(LGPL)
NPOI - Apache 许可证

以下是 ExcelLibrary 的一些示例代码:

这是一个从数据库中获取数据并从中创建工作簿的示例。请注意,ExcelLibrary 代码是底部的单行:

//Create the data set and table
DataSet ds = new DataSet("New_DataSet");
DataTable dt = new DataTable("New_DataTable");

//Set the locale for each
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;

//Open a DB connection (in this example with OleDB)
OleDbConnection con = new OleDbConnection(dbConnectionString);
con.Open();

//Create a query and fill the data table with the data from the DB
string sql = "SELECT Whatever FROM MyDBTable;";
OleDbCommand cmd = new OleDbCommand(sql, con);
OleDbDataAdapter adptr = new OleDbDataAdapter();

adptr.SelectCommand = cmd;
adptr.Fill(dt);
con.Close();

//Add the table to the data set
ds.Tables.Add(dt);

//Here's the easy part. Create the Excel worksheet from the data set
ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

创建 Excel 文件就这么简单。您也可以手动创建 Excel 文件,但是上述功能确实让我印象深刻。

如果您对 xlsx 格式感到满意,请尝试我的 GitHub 项目EPPlus 。它始于 ExcelPackage 的源代码,但今天已完全重写。它支持范围,单元格样式,图表,形状,图片,命名范围,自动筛选和许多其他功能。

以及如何将 Open XML SDK 2.0 用于 Microsoft Office?

一些好处:

  • 不需要安装 Office
  • 微软制造 = 体面的 MSDN 文档
  • 只需一个. Net dll 即可在项目中使用
  • SDK 随附许多工具,例如 diff,validator 等

链接:

我成功地使用了以下开源项目:

  • OOXML 格式的 ExcelPackage(Office 2007)

  • .XLS 格式的 NPOI(Office 2003)。 NPOI 2.0 (Beta)也支持 XLSX。

看看我的博客文章:

在 C#中创建 Excel 电子表格. XLS 和. XLSX

NPOI 与 Excel 表和动态图表

您可以使用 OLEDB 创建和操作 Excel 文件。检查以下内容: 使用 OLEDB 读写 Excel

典型示例:

using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\temp\\test.xls;Extended Properties='Excel 8.0;HDR=Yes'"))
{
  conn.Open();
  OleDbCommand cmd = new OleDbCommand("CREATE TABLE [Sheet1] ([Column1] string, [Column2] string)", conn);
  cmd.ExecuteNonQuery();
}

编辑 - 更多链接:

商业解决方案SpreadsheetGear for .NET可以实现。

你可以看到现场 ASP.NET(C#和 VB)样本这里下载一个评估版本在这里

免责声明:我拥有 SpreadsheetGear LLC

我使用过的一些选项:

如果必须使用 XLSX: ExcelPackage是一个很好的开始,但是当开发人员退出使用它时就死了。 ExML 从那里开始,并添加了一些功能。 ExML不是一个不错的选择,我仍在几个生产网站中使用它。

不过,对于我所有的新项目,我都使用NPOIApache POI的. NET 端口)。 NPOI 2.0(Alpha)也支持 XLSX。

一个非常轻量级的选择可能是使用 HTML 表。只需在文件中创建 head,body 和 table 标签,然后将其另存为扩展名为. xls 的文件即可。您可以使用 Microsoft 特定的属性来设置输出样式,包括公式。

我意识到您可能没有在 Web 应用程序中对此进行编码,但这是通过 HTML 表构成 Excel 文件的示例 。如果您要编码控制台应用程序,桌面应用程序或服务,则可以使用此技术。

您可以使用ExcelXmlWriter

工作正常。

如果要创建 Excel 2007/2010 文件,请尝试以下开源项目: https : //github.com/closedxml/closedxml

它提供了一种面向对象的方式来处理文件(类似于 VBA),而无需处理 XML 文档的麻烦。它可以由任何. NET 语言(如 C#和 Visual Basic(VB))使用。

ClosedXML 允许您在没有 Excel 应用程序的情况下创建 Excel 2007/2010 文件。典型示例是在 Web 服务器上创建 Excel 报告:

var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
workbook.SaveAs("HelloWorld.xlsx");