当前位置: 首页 > news >正文

国产化Excel处理组件Spire.XLS教程:在 C# 中生成 Excel文件

在 C# 中生成 Excel 文件是一项常见任务,广泛应用于报表系统构建、结构化数据导出及 Excel 自动化流程开发。无论你是在构建桌面工具、Web API,还是跨平台应用,通过代码生成 .xlsx 文件,都能显著提升数据处理和交互效率。

本文将介绍如何使用 Spire.XLS for .NET(一款独立的 Excel 操作库,支持国产化信创)在各类 .NET 项目中生成 Excel 文件,包括 .NET 桌面程序、ASP.NET Web 服务以及后台自动化任务。内容涵盖从零新建 Excel 工作簿、导出 DataTable、服务器端生成文件、设置格式与公式等常见功能,并配有详细的代码示例。

Spire.XLS for .NET试用下载

环境准备

Spire.XLS for .NET 是一款轻量级 Excel 操作库,可完全通过代码创建和操作 .xls 或 .xlsx 文件,无需安装 Office,也不依赖 COM 组件,非常适合部署于 Web 服务器、微服务或云平台应用。

你可以通过 NuGet 安装该库:

Install-Package Spire.XLS

用 C# 新建 Excel 文件

在处理配置数据、小规模内容或生成模板时,直接通过 C# 新建 Excel 文件能带来极高的控制力与灵活性。

以下示例展示了如何新建一个包含文本与数值的工作表,并设置列宽和样式:

using Spire.Xls;// 创建一个新的工作簿和工作表
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "汇总"; // 设置工作表名称为“汇总”// 填充表头和数据
// 通过单元格名称访问
sheet.Range["A1"].Text = "员工";
sheet.Range["B1"].Text = "部门";
sheet.Range["C1"].Text = "薪资";// 通过行列索引访问单元格
sheet.Range[2, 1].Text = "小丽";
sheet.Range[2, 2].Text = "人事部";
sheet.Range[2, 3].NumberValue = 6500;sheet.Range[3, 1].Text = "小明";
sheet.Range[3, 2].Text = "信息部";
sheet.Range[3, 3].NumberValue = 7200;// 应用样式
CellStyle headerStyle = workbook.Styles.Add("Header");
headerStyle.Font.IsBold = true; // 设置加粗字体
sheet.Range["A1:C1"].Style = headerStyle;// 自动调整列宽
sheet.AllocatedRange.AutoFitColumns();// 保存文件
workbook.SaveToFile("BasicExcel.xlsx", FileFormat.Version2016);
workbook.Dispose();

生成的 Excel 文件:

示例:C# 新建的包含员工信息的 Excel 工作表

该方法无需安装 Office 即可直接新建 Excel 文件,适用于数据导出或配置生成任务。

用 C# 导出 DataTable 到 Excel

在处理数据库结果或 API 返回数据时,将 DataTable 导出为 Excel 文件是一项常见需求。Spire.XLS 支持快速加载结构化数据并自动生成列头,无需手动遍历行列。

以下示例展示如何将 DataTable 写入工作表并导出为 Excel 文件:

using System.Data;
using Spire.Xls;// 创建一个模拟的数据表
DataTable dt = new DataTable("产品清单");
dt.Columns.Add("产品名称", typeof(string));
dt.Columns.Add("价格", typeof(double));
dt.Columns.Add("库存", typeof(int));// 添加数据行(中文)
dt.Rows.Add("笔记本电脑", 1299.99, 20);
dt.Rows.Add("显示器", 199.5, 50);
dt.Rows.Add("鼠标", 25.75, 150);// 导入到 Excel
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "库存报告";
sheet.InsertDataTable(dt, true, 1, 1); // 从第1行第1列插入,并包含表头// 自动调整列宽
sheet.AllocatedRange.AutoFitColumns();// 保存文件
workbook.SaveToFile("库存报表.xlsx", FileFormat.Version2016);
workbook.Dispose();

导出的 Excel 文件:

示例:将 DataTable 导出为 Excel 文件后的工作表预览

这种方式适合生成库存清单、业务报表和数据分析结果,无需使用 Excel 或 COM 自动化。

用 C# 设置 Excel 表格格式与公式

为了提升 Excel 报表的可读性与专业性,除了写入原始数据,还可以通过 C# 设置单元格样式、边框、字体颜色、数字格式,以及插入 Excel 原生公式。

以下示例展示如何使用 Spire.XLS 设置标题样式、货币格式、计算公式及交替行颜色:

using Spire.Xls;
using System.Drawing;Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets[0];
sheet.Name = "销售报表"; // 设置工作表名称// 设置表头
sheet.Range["A1"].Text = "商品";
sheet.Range["B1"].Text = "单价";
sheet.Range["C1"].Text = "数量";
sheet.Range["D1"].Text = "总价";// 添加示例数据(中文)
string[,] items = {{ "圆珠笔", "1.5", "10" },{ "笔记本", "3.75", "5" },{ "橡皮擦", "0.99", "20" }
};for (int i = 0; i < items.GetLength(0); i++)
{int row = i + 2;sheet.Range[$"A{row}"].Text = items[i, 0];                          // 商品名称sheet.Range[$"B{row}"].NumberValue = double.Parse(items[i, 1]);   // 单价sheet.Range[$"C{row}"].NumberValue = double.Parse(items[i, 2]);   // 数量sheet.Range[$"D{row}"].Formula = $"=B{row}*C{row}";               // 总价(公式计算)
}// 样式:表头行
CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");
headerStyle.Font.IsBold = true;
headerStyle.Font.Color = Color.White;
headerStyle.Font.Size = 12;
headerStyle.KnownColor = ExcelColors.DarkBlue;
headerStyle.HorizontalAlignment = HorizontalAlignType.Center;
headerStyle.VerticalAlignment = VerticalAlignType.Center;
headerStyle.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thick;
headerStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thick;
sheet.Range["A1:D1"].Style = headerStyle;
sheet.Range["A1:D1"].RowHeight = 22;// 样式:数据单元格
CellStyle dataStyle = workbook.Styles.Add("DataStyle");
dataStyle.NumberFormat = "\"¥\"#,##0.00"; // 显示人民币符号
dataStyle.HorizontalAlignment = HorizontalAlignType.Right;
dataStyle.VerticalAlignment = VerticalAlignType.Center;
dataStyle.Borders[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thin;
dataStyle.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin;// 应用数据样式到单价、数量、总价列
sheet.Range["B2:D4"].Style = dataStyle;// 可选:交替行底色增强可读性
for (int r = 2; r <= 4; r++)
{if (r % 2 == 0)sheet.Range[$"A{r}:D{r}"].Style.KnownColor = ExcelColors.LightYellow;
}// 设置列宽和行高
sheet.AllocatedRange.ColumnWidth = 10;
sheet.AllocatedRange.RowHeight = 20;// 保存文件
workbook.SaveToFile("样式化报表.xlsx", FileFormat.Version2016);
workbook.Dispose();

生成的 Excel 文件:

示例:包含格式和公式的 Excel 报表文件预览

这种方法适合生成销售报表、财务记录、采购清单等需要格式与计算支持的 Excel 文档。

你还可以进一步应用百分比、自定义数字格式等样式。

在 ASP.NET Core 中生成 Excel 文件

在 ASP.NET Core 应用中(例如 .NET 6/7/8),动态导出 Excel 报表是后台管理系统和数据平台中的常见需求。

以下示例展示了如何在 Razor Pages 页面中生成 Excel 文件并通过浏览器下载,无需将文件保存到磁盘:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Spire.Xls;
using System.Data;public class ExportModel : PageModel
{public IActionResult OnGet(){// 模拟专业数据:项目进度报告DataTable dt = new DataTable("项目进度");dt.Columns.Add("项目编号", typeof(string));dt.Columns.Add("项目名称", typeof(string));dt.Columns.Add("负责人", typeof(string));dt.Columns.Add("开始日期", typeof(DateTime));dt.Columns.Add("计划完成", typeof(DateTime));dt.Columns.Add("当前进度", typeof(string));dt.Columns.Add("状态", typeof(string));dt.Rows.Add("PRJ001", "智能仓储系统", "张强", new DateTime(2024, 3, 1), new DateTime(2024, 9, 30), "65%", "进行中");dt.Rows.Add("PRJ002", "企业门户网站升级", "李华", new DateTime(2024, 5, 10), new DateTime(2024, 7, 15), "100%", "已完成");dt.Rows.Add("PRJ003", "数据治理平台建设", "王敏", new DateTime(2024, 6, 1), new DateTime(2024, 12, 31), "30%", "延迟");// 创建 Excel 工作簿和工作表Workbook workbook = new Workbook();Worksheet sheet = workbook.Worksheets[0];sheet.Name = "项目进度报告";// 插入数据表(包含表头)sheet.InsertDataTable(dt, true, 1, 1);// 表头样式CellStyle headerStyle = workbook.Styles.Add("HeaderStyle");headerStyle.Font.IsBold = true;headerStyle.HorizontalAlignment = HorizontalAlignType.Center;headerStyle.VerticalAlignment = VerticalAlignType.Center;sheet.Rows[0].Style = headerStyle;// 自动调整列宽sheet.AllocatedRange.AutoFitColumns();// 保存为内存流using var stream = new MemoryStream();workbook.SaveToStream(stream, FileFormat.Version2016);stream.Position = 0;// 返回文件return File(stream.ToArray(),"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","项目进度报告.xlsx");}
}

导出的 Excel 文件:

ASP.NET Core 页面中生成并下载的 Excel 项目进度报表

该方法适用于需要服务端生成并下载 Excel 文件的 Web 场景,支持:

  • ✅ ASP.NET Core 3.1、.NET 5、.NET 6、.NET 7、.NET 8
  • ✅ Razor Pages、MVC 控制器、API 接口等类型项目

在 ASP.NET Web Forms 中生成 Excel 文件

对于使用经典 ASP.NET Web Forms 的项目,也可以通过 Spire.XLS 实现在浏览器中即时下载 Excel 文件,而无需中间文件或 Office 安装。

以下示例展示了如何在 Web Forms 页面中使用内存流创建并返回 Excel 文件:

using Spire.Xls;
using System;
using System.IO;namespace YourNamespace
{public partial class Default : System.Web.UI.Page{protected void btnExport_Click(object sender, EventArgs e){// 创建 Excel 文件并准备导出下载Workbook workbook = new Workbook();Worksheet sheet = workbook.Worksheets[0];sheet.Name = "用户信息";// 表头string[] headers = { "编号", "姓名", "部门", "入职日期" };for (int i = 0; i < headers.Length; i++){sheet.Range[1, i + 1].Text = headers[i];sheet.Range[1, i + 1].Style.Font.IsBold = true;}// 示例数据(中文)string[,] data = {{ "U001", "张美", "人事部", "2023-01-15" },{ "U002", "李强", "信息部", "2022-11-03" }};// 填充数据for (int r = 0; r < data.GetLength(0); r++)for (int c = 0; c < data.GetLength(1); c++)sheet.Range[r + 2, c + 1].Text = data[r, c];// 自动调整列宽sheet.AllocatedRange.AutoFitColumns();// 导出并触发浏览器下载using (MemoryStream ms = new MemoryStream()){workbook.SaveToStream(ms, FileFormat.Version2016);byte[] bytes = ms.ToArray();Response.Clear();Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";Response.AddHeader("Content-Disposition", "attachment; filename=用户信息.xlsx");Response.BinaryWrite(bytes);Response.End();}}}
}

导出的 Excel 文件:

ASP.NET Web Forms 中生成并导出的用户信息 Excel 文件

该方式适合用于后台管理系统、内部工具或企业内部门户,实现便捷的数据导出功能。

总结

使用 Spire.XLS for .NET,你可以轻松地在 C# 中生成 Excel 文件,覆盖桌面、Web 和后台任务等多种使用场景。不论是导出 DataTable、创建格式化报表,还是自动生成计算内容,本指南均提供了完整的示例与操作步骤。


文章转载自:
http://bronchus.alwpc.cn
http://amagasaki.alwpc.cn
http://bitternut.alwpc.cn
http://acetone.alwpc.cn
http://carpetbagger.alwpc.cn
http://chapote.alwpc.cn
http://anarchic.alwpc.cn
http://chromize.alwpc.cn
http://bullous.alwpc.cn
http://aerie.alwpc.cn
http://bayonet.alwpc.cn
http://accelerate.alwpc.cn
http://amelioration.alwpc.cn
http://chiropractic.alwpc.cn
http://battue.alwpc.cn
http://anatoxin.alwpc.cn
http://autographically.alwpc.cn
http://affixation.alwpc.cn
http://boatyard.alwpc.cn
http://cabotin.alwpc.cn
http://authority.alwpc.cn
http://blankly.alwpc.cn
http://chevalet.alwpc.cn
http://burgage.alwpc.cn
http://car.alwpc.cn
http://airdrome.alwpc.cn
http://braid.alwpc.cn
http://buddle.alwpc.cn
http://bluster.alwpc.cn
http://centreless.alwpc.cn
http://www.dtcms.com/a/281337.html

相关文章:

  • 关于LM74700-Q1低IQ理想二极管的应用与参数极限
  • saltstack安装部署
  • 对象数组列表转成树形结构--树形结构转成列表(处理菜单)
  • ORA-06413: 连接未打开
  • 设计网站集:经济信息数据 统计数据 + 农业 + 金属 + 药品 + 电子 + 加密货币 + 债券 + 期货 + 其他
  • 构建企业级项目管理全面数字化运营体系︱易趋(蓝云软件)总裁唐智勇
  • 东鹏饮料牵手盈飞无限质量管理系统(QMS)
  • 多方学习与安全多方计算
  • 电动汽车制动系统及其工作原理
  • 梁的振动特征函数分析
  • 算法学习笔记(1):组合数
  • 论文 视黄素与细胞修复
  • 可下载或通过爬虫获取疾病相关数据的网站及平台,涵盖临床数据、基因关联、药品信息等方向,并附注数据特点与获取方式:(不公开)
  • PHP安全漏洞深度解析:文件包含与SSRF攻击的攻防实战
  • keeplived双击热备配置
  • chrome浏览器(chrome138.0.0.0 )无法安装扩展程序,因为它使用了不受支持的清单版本解决方案
  • GAMES101 lec2-数学基础1(线性代数)
  • 03 51单片机之独立按键控制LED状态
  • HCIA第三次综合实验:VLAN
  • 连接new服务器注意事项
  • Java核心类库深度解析与实战:从字符串处理到计算器开发
  • 外网如何连接内网中的mysql数据库服务?跨网直接访问操作,不用公网IP
  • 人机协作系列(四)AI编程的下一个范式革命——看Factory AI如何重构软件工程?
  • 力扣——1071. 字符串的最大公因子
  • 解密AWS VPC路由表:显式关联与隐式关联,谁决定了网络出口?
  • 深入剖析Java并发基石:AQS原理与实战
  • java 并发面试题2
  • 【Java篇】IntelliJ IDEA 安装与基础配置指南
  • Linux操作系统从入门到实战(十)Linux开发工具(下)make/Makefile的推导过程与扩展语法
  • 大模型在1型糖尿病肾病V期预测及治疗方案制定中的应用研究