从C#创建Excel(.XLS和.XLSX)文件

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


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

ExcelLibrary

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

它非常简单,小巧易用。 另外它有一个DataSetHelper,可以让你使用DataSets和DataTables轻松处理Excel数据。

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

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

如评论中所述,每个库都有一些已知的错误。 总之,随着时间的推移,EPPlus似乎是最好的选择。 它似乎更积极地更新和记录。

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

以下是一些快速参考链接:
ExcelLibrary - GNU Lesser GPL
EPPlus - GNU较低通用公共许可证(LGPL)

这里是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格式感到满意,请尝试使用我的codeplex GitHub项目。 EPPlus。 从ExcelPackage的源头开始它,但今天它是一个完全重写。 支持范围,单元格样式,图表,形状,图片,名称范围,自动过滤器和其他许多东西。


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

  • 用于OOXML格式的ExcelPackage(Office 2007)

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

  • 看看我的博客文章:

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

    NPOI与Excel表和动态图表

    链接地址: http://www.djcxy.com/p/3625.html

    上一篇: Create Excel (.XLS and .XLSX) file from C#

    下一篇: When is ASP.NET Core 1.0 (ASP.NET 5 / vNext) scheduled for release?