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

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (32投票s)

2013年12月4日

CPOL

5分钟阅读

viewsIcon

202434

downloadIcon

7281

使用一行代码,将您的数据导出到真正的 Excel 文件!

引言

我早在 2014 年就首次发布了这篇 CodeProject 文章,其中介绍了我的“导出到 Excel”C# 库,至今仍非常受欢迎。

源代码仍然附带,您现在也可以通过 GitHub 将此库添加到您的项目中。只需搜索 NuGet 包“Easy.ExportToExcel”。我还在此处记录了如何轻松地将此项目添加到 .Net 8 WebApi 中:

https://isomewhere.com/exportToExcel

简而言之,我的库允许您通过使用一些免费的 Microsoft 库、我的类以及一行代码,将“导出到 Excel”功能添加到您的 C# 应用程序中。只需告诉我的库您的 DataSetDataTableList<> 数据存储在哪里,以及您想写入的(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# 库只是获取存储在 DataSetDataTableList<> 中的数据块,并将其输出到 Excel .xlsx 文件。哦,它会为您的 DataSet 中的每个 DataTable 创建一个工作表。

关于这个库的一些优点:

  1. 它会查看您的数据类型,并尝试设置正确的 Excel 单元格样式。例如,如果您有一个 DateTime 列,它会将您的数据值作为数字写入 Excel 文件,并应用样式将其显示为日期。Excel 本身就是这样存储此类数据的。
  2. 由于 Excel 文件是使用 Microsoft 的免费OpenXML库创建的,因此您可以在没有安装 Excel 的计算机上运行此代码。
  3. 我的库使用 OpenXmlWriter 创建文件。这有一个巨大的优势,即在创建大型 Excel 文件时,它不会等到创建完 Excel 文件所有元素后再将其全部写入文件。没有这个功能,您在尝试创建大型 Excel 文件时会收到内存不足的错误。
  4. 在每个工作表上,我用不同的样式设置了标题文本。您可以在我的库的 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 库添加到您的项目中...

Adding a reference

...然后取消注释我 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 SDKMicrosoft OpenXML SDK 下载。(注意:如果此链接更改,只需 Google 搜索“Microsoft OpenXML download”。

您实际上只需要此 SDK 中的两个文件:

  • DocumentFormat.OpenXml.dll 
  • WindowsBase.dll 

将这些.dll文件添加到您项目的References部分,并记住将它们设置为“Copy Local”。

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 文件添加到您的项目中,您就可以开始使用了。只需将您的数据放入 DataSetDataTableList<> 变量中,然后调用 CreateExcelDocument 函数,并指定要保存的文件名。

DataSet ds = CreateSampleData();
CreateExcelFile.CreateExcelDocument(ds, "C:\\Sample.xlsx");

就是这样。

未来发展

如我所述,这个 C# 库很棒,但并非能满足所有人的要求。然而,它是一个添加您自己功能的绝佳起点。例如,如果您想为 Excel 文件中的某些单元格添加背景色,只需 Google 搜索“open xml background color”,您将找到许多文章展示如何做到这一点。

我写这篇文章的原因是,我发现很难找到一个免费、易于使用的 C# 库,它实际上首先创建了 OpenXML Excel 文件。

祝您好运,如果您喜欢这篇文章,别忘了评分,并在评论中留下您的问题。

 

© . All rights reserved.