
在 C# 中生成 Excel 文件是一项常见任务,广泛应用于报表系统构建、结构化数据导出及 Excel 自动化流程开发。无论你是在构建桌面工具、Web API,还是跨平台应用,通过代码生成 .xlsx 文件,都能显著提升数据处理和交互效率。
本文将介绍如何使用 Spire.XLS for .NET(一款独立的 Excel 操作库,支持国产化信创)在各类 .NET 项目中生成 Excel 文件,包括 .NET 桌面程序、ASP.NET Web 服务以及后台自动化任务。内容涵盖从零新建 Excel 工作簿、导出 DataTable、服务器端生成文件、设置格式与公式等常见功能,并配有详细的代码示例。
Spire.XLS for .NET试用下载,请联系Spire产品官方授权经销商慧都科技
欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~
环境准备
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 文件:
该方法无需安装 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 文件:
这种方式适合生成库存清单、业务报表和数据分析结果,无需使用 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 文档。
你还可以进一步应用百分比、自定义数字格式等样式。
在 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 文件:
该方法适用于需要服务端生成并下载 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 文件:
该方式适合用于后台管理系统、内部工具或企业内部门户,实现便捷的数据导出功能。
总结
使用 Spire.XLS for .NET,你可以轻松地在 C# 中生成 Excel 文件,覆盖桌面、Web 和后台任务等多种使用场景。不论是导出 DataTable、创建格式化报表,还是自动生成计算内容,本指南均提供了完整的示例与操作步骤。
Spire.XLS for .NET试用下载,请联系Spire产品官方授权经销商慧都科技
欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~