C# 使用 OpenXML 库将数据导出到 Excel






4.80/5 (32投票s)
使用一行代码,将您的数据导出到真正的 Excel 文件!
引言
我早在 2014 年就首次发布了这篇 CodeProject 文章,其中介绍了我的“导出到 Excel”C# 库,至今仍非常受欢迎。
源代码仍然附带,您现在也可以通过 GitHub 将此库添加到您的项目中。只需搜索 NuGet 包“Easy.ExportToExcel”。我还在此处记录了如何轻松地将此项目添加到 .Net 8 WebApi 中:
https://isomewhere.com/exportToExcel
简而言之,我的库允许您通过使用一些免费的 Microsoft 库、我的类以及一行代码,将“导出到 Excel”功能添加到您的 C# 应用程序中。只需告诉我的库您的 DataSet
、DataTable
或 List<>
数据存储在哪里,以及您想写入的(Excel)文件名。
这是如何在 C# WinForms 应用程序中使用它的
// Step 1: Create a DataSet, and put some sample data in it
DataSet ds = CreateSampleData();
// Step 2: Create the Excel .xlsx file
try
{
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);
}
catch (Exception ex)
{
MessageBox.Show("Couldn't create Excel file.\r\nException: " + ex.Message);
return;
}
限制
请不要误会 - 这个 C# 库绝对是基础的。如果您正在寻找一个可以导出图像、图表和数据透视表到 Excel 文件的库,那么这里不适合您。您可以购买第三方库,或者采用我提供的代码,并以此为基础创建您自己的自定义库。
正如您将看到的,这个 C# 库只是获取存储在 DataSet
、DataTable
或 List<>
中的数据块,并将其输出到 Excel .xlsx 文件。哦,它会为您的 DataSet
中的每个 DataTable
创建一个工作表。
关于这个库的一些优点:
- 它会查看您的数据类型,并尝试设置正确的 Excel 单元格样式。例如,如果您有一个
DateTime
列,它会将您的数据值作为数字写入 Excel 文件,并应用样式将其显示为日期。Excel 本身就是这样存储此类数据的。 - 由于 Excel 文件是使用 Microsoft 的免费OpenXML库创建的,因此您可以在没有安装 Excel 的计算机上运行此代码。
- 我的库使用
OpenXmlWriter
创建文件。这有一个巨大的优势,即在创建大型 Excel 文件时,它不会等到创建完 Excel 文件所有元素后再将其全部写入文件。没有这个功能,您在尝试创建大型 Excel 文件时会收到内存不足的错误。 - 在每个工作表上,我用不同的样式设置了标题文本。您可以在我的库的
GenerateStyleSheet()
函数中查看我是如何做到的,并可以根据需要自定义其外观、字体和颜色。
说了这么多,这个 C# 库是黄金。我在苏黎世的金融公司工作了 12 年,毫无例外,无论您使您的应用程序多么美观和响应迅速,用户总是希望能够使用 Excel 来玩弄数据。现在,您可以轻松地添加此功能。
1. 将库添加到您的 ASP.NET Core 应用程序
让我们从 ASP.NET Core 开始,因为这是大多数人应该/将会使用的地方。只需三个简单的步骤即可将我的库添加到您的应用程序中。
首先,从本文顶部下载 CreateExcelFile.cs 文件,并将其添加到您的项目中。在该文件的顶部,您会看到三个注释掉的 #define
语句。您只需取消注释第二个语句,表示您正在使用 ASP.NET Core。
// #define USING_ASP_NET // Uncomment this line, if you're using the old ASP.NET
#define USING_ASP_NET_CORE // Uncomment this line, if you're using ASP.NET Core 2 or later
// #define DATA_CONTAINS_FORMULAE
接下来,您需要在 Visual Studio 中打开“NuGet 包管理器”并包含“DocumentFormat.OpenXml”NuGet 包。这是 Microsoft 用于创建 Excel 文件的库。
最后,您需要让您的代码调用 StreamExcelDocument
函数。我实际上在这篇 CodeProject 文章中演示了如何从 ASP.Net Core Web API 中做到这一点。
[HttpGet("ExportToExcel")]
public async Task<IActionResult> ExportEmployeesToExcel()
{
try
{
List<Employee> employees = await _context.Employee.ToListAsync();
FileStreamResult fr = ExportToExcel.CreateExcelFile.StreamExcelDocument
(employees, "Employees.xlsx");
return fr;
}
catch (Exception ex)
{
return new BadRequestObjectResult(ex);
}
}
是不是很简单!您基本上只需传入一个 List
,给它一个文件名,然后我的库就会为您创建 Excel 文件,并将其作为 FileStreamResult
对象返回。
2. 将库添加到您的 ASP.NET 应用程序
如果您仍然在使用原始的 ASP.NET(如果这样,为什么?!),那么以下是在您的应用程序中使用该库的步骤。
首先,您需要将 System.Web 库添加到您的项目中...
...然后取消注释我 CreateExcelFile.cs 文件顶部的第一个 using 语句。
#define USING_ASP_NET // Uncomment this line, if you're using the old ASP.NET
// #define USING_ASP_NET_CORE // Uncomment this line, if you're using ASP.NET Core 2 or later
// #define DATA_CONTAINS_FORMULAE
接下来,您需要从这里下载并安装免费的Microsoft OpenXML SDK: Microsoft OpenXML SDK 下载。(注意:如果此链接更改,只需 Google 搜索“Microsoft OpenXML download”。
您实际上只需要此 SDK 中的两个文件:
- DocumentFormat.OpenXml.dll
- WindowsBase.dll
将这些.dll文件添加到您项目的References部分,并记住将它们设置为“Copy Local”。
使用ASP.NET(不是 ASP.NET Core),您可以访问三个函数来创建 Excel 文件。
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)
例如,如果我的 ASP.NET C# 应用程序有一个员工记录列表,存储在 List<Employee>
中,那么我会在我的网页上添加一个“导出到 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);
}
3. 将库添加到您的 C# WinForms 应用程序
这与 ASP.NET(上方)的步骤几乎相同。再次,您需要使用上面的链接下载并安装免费的Microsoft OpenXML SDK,并将这两个 .dll 文件添加到您的项目中。
然后只需将我的 CreateExcelFile.cs 文件添加到您的项目中,您就可以开始使用了。只需将您的数据放入 DataSet
、DataTable
或 List<>
变量中,然后调用 CreateExcelDocument
函数,并指定要保存的文件名。
DataSet ds = CreateSampleData();
CreateExcelFile.CreateExcelDocument(ds, "C:\\Sample.xlsx");
就是这样。
未来发展
如我所述,这个 C# 库很棒,但并非能满足所有人的要求。然而,它是一个添加您自己功能的绝佳起点。例如,如果您想为 Excel 文件中的某些单元格添加背景色,只需 Google 搜索“open xml background color”,您将找到许多文章展示如何做到这一点。
我写这篇文章的原因是,我发现很难找到一个免费、易于使用的 C# 库,它实际上首先创建了 OpenXML Excel 文件。
祝您好运,如果您喜欢这篇文章,别忘了评分,并在评论中留下您的问题。