65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (99投票s)

2013 年 12 月 5 日

CPOL

4分钟阅读

viewsIcon

524684

downloadIcon

19383

如何轻松地为您的应用程序添加“导出到 Excel”功能。

引言

令人惊讶的是,即使在2013年的今天,仍然有如此多的开发人员还在寻求如何编写C#和VB.NET代码来将他们的数据导出到Excel。

更糟糕的是,他们中的许多人会偶然发现一些文章,建议他们将数据写入逗号分隔的文件,但将文件扩展名改为.xls

因此,今天我将介绍如何使用我的C#“导出到Excel”类,您可以将其添加到您的C# WinForms / WPF / ASP.NET应用程序中,只需一行代码。

根据您的数据是存储在DataSetDataTable还是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中的数据。

Sample spreadsheet

这个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添加到您项目的“引用”部分,并记住将其设置为“复制本地”。

Copy Local

然后,只需下载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库的引用。

Adding a reference

完成这两个步骤后,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文件。

一个免费的“导出到Excel”C#类,使用OpenXML - CodeProject - 代码之家
© . All rights reserved.