跳至页脚内容
Iron Academy Logo
学习 C#
学习 C#

其他类别

在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");
var file = new FileInfo(@"C:\demos\youtubedemo.xlsx");

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

创建数据模型

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

  • int Id

  • 字符串 FirstName

  • 字符串 LastName

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

异步将数据保存到 Excel 文件

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

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

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

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

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

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

using var package = new ExcelPackage(file);
using var package = new ExcelPackage(file);

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

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

加载数据

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

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

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

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

最后,他保存了 Excel 文件

await package.SaveAsync();
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.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.Row(2).Style.Font.Bold = true;
ws.Row(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

自定义列宽

ws.Column(3).Width = 20;
ws.Column(3).Width = 20;

本节演示了高级格式,如

  • 合并单元格

  • 字体样式

  • 背景颜色

  • 行/列对齐

  • 宽度调整

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

用 C# 从 Excel 文件读取数据

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

蒂姆介绍方法:

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

他设置了行和列计数器:

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

循环浏览行

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

while (!string.IsNullOrWhiteSpace(ws.Cells[row, col].Value?.ToString()))
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();
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已填充并返回。

验证导入的数据

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

foreach (var p in peopleFromExcel)
{
     Console.WriteLine($"{p.Id} {p.FirstName} {p.LastName}");
}
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 应用程序中。

Hero Worlddot related to 在C#中创建Excel文件
Hero Affiliate related to 在C#中创建Excel文件

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我