国产化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产品官方授权经销商慧都科技

欢迎加入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),与更多小伙伴一起提升文档开发技能~