王永庆 發表於 2025-7-15 11:35:00

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

<p><img src="https://image.evget.com/attachment/keditor/image/20250715/103901_6.png"></p>
<p><strong>在 C# 中生成 Excel 文件</strong>是一项常见任务,广泛应用于报表系统构建、结构化数据导出及 Excel 自动化流程开发。无论你是在构建桌面工具、Web API,还是跨平台应用,通过代码生成 .xlsx 文件,都能显著提升数据处理和交互效率。</p>
<p>本文将介绍如何使用<strong>&nbsp;Spire.XLS for .NET</strong>(一款独立的 Excel 操作库,支持国产化信创)在各类&nbsp;<strong>.NET 项目中生成 Excel 文件</strong>,包括 .NET 桌面程序、ASP.NET Web 服务以及后台自动化任务。内容涵盖从零新建 Excel 工作簿、导出 DataTable、服务器端生成文件、设置格式与公式等常见功能,并配有详细的代码示例。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系Spire产品官方授权经销商<span style="color: rgba(0, 0, 0, 1)">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p>
<h2>环境准备</h2>
<p><strong>Spire.XLS</strong><strong>&nbsp;for .NET</strong><strong>&nbsp;</strong>是一款轻量级 Excel 操作库,可完全通过代码创建和操作 .xls 或 .xlsx 文件,无需安装 Office,也不依赖 COM 组件,非常适合部署于 Web 服务器、微服务或云平台应用。</p>
<p>你可以通过 NuGet 安装该库:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>Install-Package Spire.XLS</code></pre>
<h2>用 C# 新建 Excel 文件</h2>
<p>在处理配置数据、小规模内容或生成模板时,直接通过 C# 新建 Excel 文件能带来极高的控制力与灵活性。</p>
<p>以下示例展示了如何新建一个包含文本与数值的工作表,并设置列宽和样式:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>using Spire.Xls;

// 创建一个新的工作簿和工作表
Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets;
sheet.Name = "汇总"; // 设置工作表名称为“汇总”

// 填充表头和数据
// 通过单元格名称访问
sheet.Range["A1"].Text = "员工";
sheet.Range["B1"].Text = "部门";
sheet.Range["C1"].Text = "薪资";

// 通过行列索引访问单元格
sheet.Range.Text = "小丽";
sheet.Range.Text = "人事部";
sheet.Range.NumberValue = 6500;

sheet.Range.Text = "小明";
sheet.Range.Text = "信息部";
sheet.Range.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();</code></pre>
<p>生成的 Excel 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/generate-excel-file-csharp-1.png"></p>
<p>该方法无需安装 Office 即可直接新建 Excel 文件,适用于数据导出或配置生成任务。</p>
<h2>用 C# 导出 DataTable 到 Excel</h2>
<p>在处理数据库结果或 API 返回数据时,将&nbsp;<strong>DataTable</strong>&nbsp;导出为 Excel 文件是一项常见需求。<strong>Spire.XLS&nbsp;</strong>支持快速加载结构化数据并自动生成列头,无需手动遍历行列。</p>
<p>以下示例展示如何将 DataTable 写入工作表并导出为 Excel 文件:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>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;
sheet.Name = "库存报告";
sheet.InsertDataTable(dt, true, 1, 1); // 从第1行第1列插入,并包含表头

// 自动调整列宽
sheet.AllocatedRange.AutoFitColumns();

// 保存文件
workbook.SaveToFile("库存报表.xlsx", FileFormat.Version2016);
workbook.Dispose();</code></pre>
<p>导出的 Excel 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/generate-excel-file-csharp-2.png"></p>
<p>这种方式适合生成库存清单、业务报表和数据分析结果,无需使用 Excel 或 COM 自动化。</p>
<h2>用 C# 设置 Excel 表格格式与公式</h2>
<p>为了提升 Excel 报表的可读性与专业性,除了写入原始数据,还可以通过 C# 设置单元格样式、边框、字体颜色、数字格式,以及插入 Excel 原生公式。</p>
<p>以下示例展示如何使用&nbsp;<strong>S</strong><strong>pire.XLS</strong>&nbsp;设置标题样式、货币格式、计算公式及交替行颜色:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>using Spire.Xls;
using System.Drawing;

Workbook workbook = new Workbook();
Worksheet sheet = workbook.Worksheets;
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 &lt; items.GetLength(0); i++)
{
    int row = i + 2;
    sheet.Range[$"A{row}"].Text = items;                        // 商品名称
    sheet.Range[$"B{row}"].NumberValue = double.Parse(items);   // 单价
    sheet.Range[$"C{row}"].NumberValue = double.Parse(items);   // 数量
    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.LineStyle = LineStyleType.Thick;
headerStyle.Borders.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.LineStyle = LineStyleType.Thin;
dataStyle.Borders.LineStyle = LineStyleType.Thin;

// 应用数据样式到单价、数量、总价列
sheet.Range["B2:D4"].Style = dataStyle;

// 可选:交替行底色增强可读性
for (int r = 2; r &lt;= 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();</code></pre>
<p>生成的 Excel 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/generate-excel-file-csharp-3.png"></p>
<p>这种方法适合生成销售报表、财务记录、采购清单等需要格式与计算支持的 Excel 文档。</p>
<p>你还可以进一步应用百分比、自定义数字格式等样式。</p>
<h2>在 ASP.NET Core 中生成 Excel 文件</h2>
<p>在 ASP.NET Core 应用中(例如 .NET 6/7/8),动态导出 Excel 报表是后台管理系统和数据平台中的常见需求。</p>
<p>以下示例展示了如何在 Razor Pages 页面中生成 Excel 文件并通过浏览器下载,无需将文件保存到磁盘:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>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;
      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.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");
    }
}</code></pre>
<p>导出的 Excel 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/generate-excel-file-csharp-4.png"></p>
<p>该方法适用于需要服务端生成并下载 Excel 文件的 Web 场景,支持:</p>
<ul>
<li>✅ ASP.NET Core 3.1、.NET 5、.NET 6、.NET 7、.NET 8</li>
<li>✅ Razor Pages、MVC 控制器、API 接口等类型项目</li>
</ul>
<h2>在 ASP.NET Web Forms 中生成 Excel 文件</h2>
<p>对于使用经典 ASP.NET Web Forms 的项目,也可以通过<strong>&nbsp;Spire.XLS&nbsp;</strong>实现在浏览器中即时下载 Excel 文件,而无需中间文件或 Office 安装。</p>
<p>以下示例展示了如何在 Web Forms 页面中使用内存流创建并返回 Excel 文件:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>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;
            sheet.Name = "用户信息";

            // 表头
            string[] headers = { "编号", "姓名", "部门", "入职日期" };
            for (int i = 0; i &lt; headers.Length; i++)
            {
                sheet.Range.Text = headers;
                sheet.Range.Style.Font.IsBold = true;
            }

            // 示例数据(中文)
            string[,] data = {
                { "U001", "张美", "人事部", "2023-01-15" },
                { "U002", "李强", "信息部", "2022-11-03" }
            };

            // 填充数据
            for (int r = 0; r &lt; data.GetLength(0); r++)
                for (int c = 0; c &lt; data.GetLength(1); c++)
                  sheet.Range.Text = data;

            // 自动调整列宽
            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();
            }
      }
    }
}</code></pre>
<p>导出的 Excel 文件:</p>
<p><img src="https://www.e-iceblue.cn/images/tutorials-images/generate-excel-file-csharp-5.png"></p>
<p>该方式适合用于后台管理系统、内部工具或企业内部门户,实现便捷的数据导出功能。</p>
<h2>总结</h2>
<p>使用<strong>&nbsp;Spire.XLS for .NET</strong>,你可以轻松地在 C# 中生成 Excel 文件,覆盖桌面、Web 和后台任务等多种使用场景。不论是导出 DataTable、创建格式化报表,还是自动生成计算内容,本指南均提供了完整的示例与操作步骤。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.XLS for .NET试用下载,请联系Spire产品官方授权经销商<span style="color: rgba(0, 0, 0, 1)">慧都科技</span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升文档开发技能~</strong></span></p><br><br>
来源:https://www.cnblogs.com/software-Development/p/18985350
頁: [1]
查看完整版本: 国产化Excel处理组件Spire.XLS教程:在 C# 中生成 Excel 文件