在 C# 中生成 Excel 文件是一项常见任务,广泛应用于报表系统构建、结构化数据导出及 Excel 自动化流程开发。无论你是在构建桌面工具、Web API,还是跨平台应用,通过代码生成 .xlsx 文件,都能显著提升数据处理和交互效率。
本文将介绍如何使用 Spire.XLS for .NET(一款独立的 Excel 操作库)在各类 .NET 项目中生成 Excel 文件,包括 .NET 桌面程序、ASP.NET Web 服务以及后台自动化任务。内容涵盖从零新建 Excel 工作簿、导出 DataTable、服务器端生成文件、设置格式与公式等常见功能,并配有详细的代码示例。
目录
- 环境准备
- 用 C# 新建 Excel 文件
- 用 C# 导出 DataTable 到 Excel
- 用 C# 设置 Excel 表格格式与公式
- 在 ASP.NET Core 中生成 Excel 文件
- 在 ASP.NET Web Forms 中生成 Excel 文件
- 常见问题解答
- 总结
环境准备
Spire.XLS for .NET 是一款轻量级 Excel 操作库,可完全通过代码创建和操作 .xls 或 .xlsx 文件,无需安装 Office,也不依赖 COM 组件,非常适合部署于 Web 服务器、微服务或云平台应用。
你可以通过 NuGet 安装该库:
Install-Package Spire.XLS
对于功能较轻的需求,也可使用免费版:Free Spire.XLS for .NET:
Install-Package FreeSpire.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 与 DataTable 之间导入与导出数据
用 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 文件:
该方法适用于需要服务端生成并下载 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 文件:
该方式适合用于后台管理系统、内部工具或企业内部门户,实现便捷的数据导出功能。
常见问题解答
如何在 C# 中创建 Excel 文件?
使用 Spire.XLS 等库,可以创建新的工作簿、填充数据,并保存为 Excel 文件,无需安装 Office。
如何将数据导出为 Excel 文件?
可以将 DataTable 数据直接导入工作表,再保存为 Excel 文件,Spire.XLS 会自动生成列头并支持格式设置。
ASP.NET 如何生成 Excel 文件?
Spire.XLS 兼容 ASP.NET Core 和 Web Forms。在 Core 中通过流返回文件,在 Web Forms 中使用 Response.BinaryWrite()
实现下载。
是否支持 .NET Core?
是的,Spire.XLS 支持 .NET Core 3.1 及以上版本,包括 .NET 5、6、7、8,适用于跨平台部署。
总结
使用 Spire.XLS for .NET,你可以轻松地在 C# 中生成 Excel 文件,覆盖桌面、Web 和后台任务等多种使用场景。不论是导出 DataTable、创建格式化报表,还是自动生成计算内容,本指南均提供了完整的示例与操作步骤。
点击申请临时免费授权,解锁付费版全部功能并移除评估限制。