一个免费的“导出到Excel”C#类,使用OpenXML






4.88/5 (99投票s)
如何轻松地为您的应用程序添加“导出到 Excel”功能。
引言
令人惊讶的是,即使在2013年的今天,仍然有如此多的开发人员还在寻求如何编写C#和VB.NET代码来将他们的数据导出到Excel。
更糟糕的是,他们中的许多人会偶然发现一些文章,建议他们将数据写入逗号分隔的文件,但将文件扩展名改为.xls。
因此,今天我将介绍如何使用我的C#“导出到Excel”类,您可以将其添加到您的C# WinForms / WPF / ASP.NET应用程序中,只需一行代码。
根据您的数据是存储在DataSet
、DataTable
还是List<>
中,您只需调用这三个函数中的一个,并告诉它们您想写入什么(Excel)文件名。
public static bool CreateExcelDocument<T>(List<T> list, string ExcelFilename
public static bool CreateExcelDocument(DataTable dt, string ExcelFilename
public static bool CreateExcelDocument(DataSet ds, string ExcelFilename)
这是一个简单的例子。
我们创建一个DataSet
,用一些数据填充它(只需添加您自己的CreateSampleData
函数),然后调用CreateExcelFile.CreateExcelDocument
函数,将DataSet
和文件名传递给它。
// Step 1: Create a DataSet, and put some sample data in it
DataSet ds = CreateSampleData();
// Step 2: Create the Excel .xlsx file
try
{
CreateExcelFile.CreateExcelDocument(ds, "C:\\Sample.xlsx");
}
catch (Exception ex)
{
MessageBox.Show("Couldn't create Excel file.\r\nException: " + ex.Message);
return;
}
这就够了。CreateExcelDocument
函数将为您创建一个“真实的”Excel文件。
例如,如果您创建了一个DataSet
,其中包含三个名为
- 驱动程序
- Vehicles(车辆),
- Vehicle Owners(车主),
...那么您的Excel文件看起来就会像这样。该类将为每个DataTable
创建一个工作表,每个工作表将包含该DataTable
中的数据。
这个C#类的完整源代码可在此处免费下载(点击CodeProject左侧面板上的“浏览代码”链接),或者您可以从我的博客MikesKnowledgeBase下载完整的演示和VB.NET版本。
将库添加到您的应用程序
上面的C#代码展示了调用CreateExcelFile
类有多么简单。
DataSet ds = CreateSampleData();
CreateExcelFile.CreateExcelDocument(ds, "C:\\Sample.xlsx");
但是,要使用这个库,您需要从免费的Microsoft OpenXML SDK中添加两个文件。
- DocumentFormat.OpenXml.dll:来自免费的MicrosoftOpen XML SDK库。
- WindowsBase.dll:来自Microsoft.NET Framework库。
将这两个DLL添加到您项目的“引用”部分,并记住将其设置为“复制本地”。
然后,只需下载CreateExcelFile.cs文件(通过CodeProject左侧面板上的“浏览代码”链接),并将其添加到您的应用程序中。
就是这样。
无论您的数据是存储在List<>
、DataTable
还是DataSet
中,您都可以使用那一行代码将其导出为“真实的”Office 2007 Excel.xlsx文件。
由于它是使用OpenXML库创建的,因此您可以在没有安装Excel的机器上运行此代码。
ASP.NET
对于ASP.NET开发人员,我添加了三个额外的函数。
public static bool CreateExcelDocument<T>(List<T> list, string filename, System.Web.HttpResponse Response)
public static bool CreateExcelDocument(DataTable dt, string filename, System.Web.HttpResponse Response)
public static bool CreateExcelDocument(DataSet ds, string filename, System.Web.HttpResponse Response)
而不是在临时目录中创建Excel文件,然后加载文件并将其输出到网页的HttpResponse
,您可以让该库直接写入HttpResponse
。
但是,默认情况下,此功能是禁用的(以防止非ASP.NET开发人员的构建问题)。要启用这三个函数,您需要进行两项更改。
首先,取消注释CreateExcelFile.cs代码的顶行,使其现在读为
#define INCLUDE_WEB_FUNCTIONS
现在,您需要添加对System.Web
.NET库的引用。
完成这两个步骤后,CreateExcelFile库即可使用。
例如,在这个例子中,我的ASP.NET C#代码有一个Employee
记录列表,存储在一个List<Employeee>
中。我在网页上添加了一个“导出到Excel”按钮,当用户点击它时,我只需简单地调用CreateExcelFile
类。
// In this example, I have a defined a List of my Employee objects.<br />class Employee;
List<Employee> listOfEmployees = new List<Employee>();
...
// The following ASP.Net code gets run when I click on my "Export to Excel" button.
protected void btnExportToExcel_Click(object sender, EventArgs e)
{
// It doesn't get much easier than this...
CreateExcelFile.CreateExcelDocument(listOfEmployees, "Employees.xlsx", Response);
}
就这样。一个真实的Excel文件,一行代码搞定。
展望未来
您会注意到,这个库非常擅长一件事——将普通、枯燥的数据写入Excel文件。我没有尝试添加任何用于添加格式、颜色、数据透视表或其他任何内容的类。
但是,这个类是入门(无需付费购买第三方软件即可创建Excel文件)的一个很好的方式,如果您想进一步扩展,您会发现通过Google很容易找到在此基础上添加的额外源代码。
例如,如果您想为Excel文件中的某些单元格添加背景颜色,只需搜索“open XML background color”,您就会找到许多文章向您展示如何做到这一点。
我写这篇文章的原因是,我发现很难找到一个免费、易于使用的C#库,能够实际创建OpenXML Excel文件。