IRONSOFTWAREHOME

在C#中创建Excel文件

用 C# 创建 Excel 文件

Tim Corey

55分42秒

对于任何构建报表工具、数据导出或用户输入界面的 C# 开发人员来说,创建和处理 Excel 文件都是一项至关重要的技能。 在本文中,我们将深入了解 Tim Corey 在其视频"用 C# 创建 Excel 文件"中提供的详细演练,他演示了如何使用 C# 创建 Excel 文件、格式化文件,甚至从中读回数据--所有这些都使用 EPPlus 库。

无论您是想从List创建一个新的Excel工作簿,格式化Excel工作表单元格,还是将结构化数据读回您的应用程序,Tim的示例提供了一个实用的教程,涵盖了用C#生成Excel文件的基本要点。

让我们参照 Tim 的视频来逐步分析。

简介:为什么在C#中使用Excel?

Tim 首先解释说,Microsoft Excel 是商业中最重要的工具之一。 Excel 文件用户友好、用途广泛,非常适合用来表示数据。 他重点介绍了如何用 C# 创建 Excel 文件来替代复杂的报表解决方案,从而使 Excel 成为您的默认报表工具。

目标:使用 C# 创建一个 Excel 应用程序,填充数据,应用一些格式化,然后从该 Excel 文件读取数据。

在解决方案资源管理器中设置项目

蒂姆打开 Visual Studio 2019,选择一个控制台应用程序(.NET Core),并将解决方案命名为 ExcelDemoApp。使用控制台应用程序可以提供一个干净整洁、无干扰的环境,从而可以专注于 Excel 相关的代码。

他将目标框架升级到 .NET 5.0,以利用 C# 9 的功能,如简化对象实例化。

从 NuGet 软件包中添加 EPPlus.

为了创建 Excel 工作簿,Tim 通过 NuGet 软件包管理器安装了 EPPlus 软件包。 EPPlus 是一个 Excel 库,可与 .xlsx 文件(Open XML)一起使用,支持完整的 Excel 功能,如图表、表格、样式和公式,而无需使用 MS Office 或 Excel Interop。

注:EPPlus 可免费用于非商业用途,但商业应用需要许可证。

他将所需的非商业许可接受行复制到代码中,以避免运行时出错,并使用 OfficeOpenXml 添加必要的内容; 指令。

定义 Excel 文件路径

Tim 使用 System.IO.FileInfo 设置了一个硬编码文件路径:

var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");

该文件最初并不存在--它将由程序动态创建。

创建数据模型

为了填充 Excel 工作表,Tim 定义了一个简单的 PersonModel 类,该类具有以下属性:

  • int Id

  • 字符串 FirstName

  • 字符串 LastName

他使用辅助方法 GetSetupData() 返回一个 List<PersonModel>,其中包含 Tim Corey、Sue Storm 和 Jane Smith 等示例数据。

异步将数据保存到 Excel 文件

在现代开发中,阻塞用户界面线程是不可接受的。 这就是 Tim 定义异步方法的原因:

static async Task SaveExcelFile(List<PersonModel> people, FileInfo file)

在写入 Excel 之前,他会检查文件是否存在并将其删除,以避免命名冲突。

if (file.Exists) file.Delete();

创建 Excel 工作表并对其进行格式化

Tim 在 using 块中使用了 EPPlus ExcelPackage 对象,以确保正确处理:

using var package = new ExcelPackage(file);

他在工作簿中添加了一个新的 ** 工作表**:

var ws = package.Workbook.Worksheets.Add("MainReport");

加载数据

using LoadFromCollection,他插入了从单元格 "A2 "开始的人员名单:

ws.Cells["A2"].LoadFromCollection(people, true);
  • 确保包含标题(如 "Id"、"FirstName"、"LastName")。

然后,AutoFitColumns() 会自动调整列宽:

ws.Cells[ws.Dimension.Address].AutoFitColumns();

最后,他保存了 Excel 文件

await package.SaveAsync();

Excel 单元格和行的样式

为了使 Excel 文件更具可读性,Tim 演示了如何应用样式:

标题行

ws.Cells["A1"].Value = "Our Cool Report";
ws.Cells["A1:C1"].Merge = true; ws.Row(1).Style.Font.Size = 24;
ws.Row(1).Style.Font.Color.SetColor(Color.Blue);
ws.Column(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

标题行

ws.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

自定义列宽

ws.Column(3).Width = 20;

本节演示了高级格式,如

  • 合并单元格

  • 字体样式

  • 背景颜色

  • 行/列对齐

  • 宽度调整

这些内容模仿了典型的 MS Office Excel 格式化功能。

在C#中从Excel文件读取数据

现在我们已经将数据写入 Excel,是时候将其读回 C# 了。

蒂姆介绍方法:

static async Task<List<PersonModel>> LoadExcelFile(FileInfo file)

他设置了行和列计数器:

int row = 3; // Skip title and header rows int col = 1;

循环浏览行

他使用 while 循环检查非空单元格并读取数值:

while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))

在循环内部,数值被读取和解析:

p.Id = int.Parse(ws.Cells[row, col].Value.ToString());
p.FirstName = ws.Cells[row, col + 1].Value.ToString();
p.LastName = ws.Cells[row, col + 2].Value.ToString();

List<PersonModel> 已填充并返回。

验证导入的数据

Tim 循环查看返回的列表,并将每个条目写入控制台:

foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}

为了展示 Excel 作为用户输入工具的灵活性,蒂姆直接在 Excel 文件中手动添加新记录("比尔-史密斯"、"玛丽-怀特")。在重新运行应用程序时,这些条目无需更改代码即可导入,这证明了 Excel 作为数据输入界面的潜力。

实际用例

Tim 重点介绍了 C# Excel 解决方案的使用案例:

  • 将数据库表格导出到 Excel

  • 导入最终用户输入的数据

  • 将 Excel 用作报告仪表板

  • 为数据处理创建结构化工作簿

所有这一切都不能依赖 Microsoft.Office.Interop.Excel,因为它需要安装 Excel。

关于 EPPlus 和 Excel 文件的最终说明

Tim 解释说,在 Excel 中打开和保存之前,以编程方式创建的 .xlsx 文件不包含所有元数据。 这就是为什么在真正的 Excel 应用程序中打开后文件大小会增大的原因。

他还指出,EPPlus 是一个完善、强大的库,支持以下语言:

  • 图表

  • 图片

  • 火花线

  • 公式

  • 页面设置

  • 边界

  • 单元格格式

结论

用 C# 创建 Excel 文件并不困难,也不昂贵。有了 EPPlus Excel 库,开发人员无需使用 MS Office 即可通过编程创建功能丰富的 Excel 文档。正如 Tim Corey 所演示的那样,只需几行代码,您就可以:

  • 创建 Excel 文件

  • 填充行和列

  • 应用样式

  • 回读数据

  • 将 Excel 用作面向用户的用户界面

这使它成为轻量级报告工具、数据导入/导出或仅仅为用户提供他们已经熟悉的界面的绝佳选择。

因此,下次当您在构建项目并需要输出或消耗 Excel 数据时,请尝试执行 Tim Corey 的 视频中的示例代码,并将 Excel 的强大功能带入您的 .NET Framework 或 .NET Core 应用程序中。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户