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

发布于:2025-07-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

在 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、创建格式化报表,还是自动生成计算内容,本指南均提供了完整的示例与操作步骤。


网站公告

今日签到

点亮在社区的每一天
去签到