当前位置: 首页 > 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://www.lryc.cn/news/589125.html

相关文章:

  • excel 通过openpyxl表格下载和插入图片
  • 给 Excel 整列空格文字内容加上前缀:像给文字穿衣服一样简单!
  • Vue获取上传Excel文件内容并展示在表格中
  • 【YOLOv11-目标检测】06-模型部署(C++)
  • Sentinel热点参数限流完整示例实现
  • 【PCIe 总线及设备入门学习专栏 5.1.1 -- PCIe PERST# 信号的作用】
  • 【PCIe 总线及设备入门学习专栏 5.1.2 -- PCIe EP core_rst_n 与 app_rst_n】
  • Excel制作玫瑰图
  • 大语言模型:高考志愿填报的“新纪元智能参谋”
  • 20250715问答课题-基于BERT与混合检索问答系统
  • 论文阅读:arxiv 2025 A Survey on Data Contamination for Large Language Models
  • 第八章,应用题
  • OpenCV 对数变换函数logTransform()
  • 【机器学习】第一章 概述
  • 【机器学习】第二章 Python入门
  • 【安卓笔记】RxJava之flatMap的使用
  • PyTorch笔记6----------神经网络案例
  • 【人工智能99问】神经网络的工作原理是什么?(4/99)
  • Android中Launcher简介
  • MySQL索引与事务详解:用大白话讲透核心概念
  • compose、 pipe 组合函数实现
  • 从底层技术到产业落地:优秘企业智脑的 AI 革命路径解析
  • Basilisk库教程(二)
  • QT——QList的详细讲解
  • SpringBoot3.0 +GraalVM17 + Docker
  • AI大模型训练相关函数知识补充
  • MongoDB基础增删改查命令
  • vscode配置运行完整C代码项目
  • B/S 架构通信原理详解
  • 高标准农田气象站的功能