使用C#实现在Excel中创建和配置数据透视表

 更新时间:2026年03月11日 08:28:45   作者:用户835629078051  
在数据分析和业务报告场景中,数据透视表(Pivot Table)是一种强大的数据汇总工具,本文将介绍如何使用 C# 在 Excel 工作表中创建和配置数据透视表,感兴趣的小伙伴可以了解下

在数据分析和业务报告场景中,数据透视表(Pivot Table)是一种强大的数据汇总工具。它能够快速对大量数据进行分类、汇总和分析,帮助用户从不同维度洞察数据规律。

对于 .NET 开发者而言,在某些场景下需要通过代码自动生成包含数据透视表的 Excel 报表。例如:

  • 自动化生成销售分析报表
  • 批量处理业务数据汇总
  • 动态创建财务分析报告

本文将介绍如何使用 C# 在 Excel 工作表中创建和配置数据透视表,包括数据源设置、字段布局和样式美化等关键步骤。

环境准备

首先需要在项目中添加 Spire.XLS for .NET 库。可以通过 NuGet 包管理器安装:

Install-Package Spire.XLS

核心实现

创建工作簿和基础数据

创建数据透视表之前,需要先准备源数据。以下代码演示如何创建一个包含产品销售数据的工作表:

using Spire.Xls;

// 创建工作簿实例
Workbook workbook = new Workbook();

// 获取第一个工作表
Worksheet sheet = workbook.Worksheets[0];

// 设置列标题
sheet.Range["A1"].Value = "Product";
sheet.Range["B1"].Value = "Month";
sheet.Range["C1"].Value = "Count";

// 填充产品数据
sheet.Range["A2"].Value = "SpireDoc";
sheet.Range["A3"].Value = "SpireDoc";
sheet.Range["A4"].Value = "SpireXls";
sheet.Range["A5"].Value = "SpireDoc";
sheet.Range["A6"].Value = "SpireXls";
sheet.Range["A7"].Value = "SpireXls";

// 填充月份数据
sheet.Range["B2"].Value = "January";
sheet.Range["B3"].Value = "February";
sheet.Range["B4"].Value = "January";
sheet.Range["B5"].Value = "January";
sheet.Range["B6"].Value = "February";
sheet.Range["B7"].Value = "February";

// 填充数量数据
sheet.Range["C2"].Value = "10";
sheet.Range["C3"].Value = "15";
sheet.Range["C4"].Value = "9";
sheet.Range["C5"].Value = "7";
sheet.Range["C6"].Value = "8";
sheet.Range["C7"].Value = "10";

这段代码创建了一个简单的销售数据表,包含产品名称、月份和销售数量三个字段。在实际应用中,这些数据通常来自数据库或其他数据源。

创建数据透视表缓存

数据透视表需要基于一个数据缓存(PivotCache)来工作。缓存存储了源数据的副本,用于提高性能:

// 定义数据源范围
CellRange dataRange = sheet.Range["A1:C7"];

// 创建数据透视表缓存
PivotCache cache = workbook.PivotCaches.Add(dataRange);

PivotCache 对象负责管理数据透视表的源数据。通过将数据范围传递给缓存,可以在后续的数据透视表操作中引用这份数据。

添加数据透视表到工作表

创建缓存后,就可以在工作表上添加数据透视表了:

// 在工作表的 E10 单元格位置添加数据透视表
PivotTable pt = sheet.PivotTables.Add("Pivot Table", sheet.Range["E10"], cache);

这里指定了三个参数:

  • "Pivot Table":数据透视表的名称
  • sheet.Range["E10"]:数据透视表左上角的起始位置
  • cache:之前创建的数据缓存

配置行字段

行字段决定了数据在垂直方向上的分组方式。可以将多个字段添加到行区域来实现多级分组:

// 将 Product 字段添加到行区域
PivotField pf = pt.PivotFields["Product"] as PivotField;
pf.Axis = AxisTypes.Row;

// 将 Month 字段添加到行区域
PivotField pf2 = pt.PivotFields["Month"] as PivotField;
pf2.Axis = AxisTypes.Row;

通过设置 Axis 属性为 AxisTypes.Row,可以将字段放置在行区域。这样数据会先按产品分组,然后在每个产品下再按月份分组。

配置数据字段

数据字段用于对数值进行汇总计算。常见的汇总方式包括求和、计数、平均值等:

// 将 Count 字段添加到数据区域,使用求和方式
pt.DataFields.Add(pt.PivotFields["Count"], "SUM of Count", SubtotalTypes.Sum);

这行代码的含义是:

  • pt.PivotFields["Count"]:选择要汇总的字段
  • "SUM of Count":数据字段的显示名称
  • SubtotalTypes.Sum:汇总类型为求和

除了 Sum 之外,还可以使用 CountAverageMaxMin 等多种汇总类型。

设置样式和自动调整

为了提高可读性,可以为数据透视表应用内置样式,并自动调整列宽:

// 应用内置样式
pt.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium12;

// 计算数据透视表数据
pt.CalculateData();

// 自动调整列宽以适应内容
sheet.AutoFitColumn(5);
sheet.AutoFitColumn(6);

CalculateData() 方法确保数据透视表在保存前完成计算。AutoFitColumn() 方法根据内容自动调整列宽,使输出更加美观。

保存文件

最后,将生成的工作簿保存到文件:

String result = "CreatePivotTable_output.xlsx";

// 以 Excel 2010 格式保存
workbook.SaveToFile(result, ExcelVersion.Version2010);

// 释放资源
workbook.Dispose();

完整示例

以下是完整的代码示例:

using System;
using Spire.Xls;

class Program
{
   static void Main()
    {
        // 创建工作簿
        Workbook workbook = new Workbook();
        
        // 获取第一个工作表
        Worksheet sheet = workbook.Worksheets[0];
        
        // 设置列标题
        sheet.Range["A1"].Value = "Product";
        sheet.Range["B1"].Value = "Month";
        sheet.Range["C1"].Value = "Count";
        
        // 填充示例数据
        sheet.Range["A2"].Value = "SpireDoc";
        sheet.Range["A3"].Value = "SpireDoc";
        sheet.Range["A4"].Value = "SpireXls";
        sheet.Range["A5"].Value = "SpireDoc";
        sheet.Range["A6"].Value = "SpireXls";
        sheet.Range["A7"].Value = "SpireXls";
        
        sheet.Range["B2"].Value = "January";
        sheet.Range["B3"].Value = "February";
        sheet.Range["B4"].Value = "January";
        sheet.Range["B5"].Value = "January";
        sheet.Range["B6"].Value = "February";
        sheet.Range["B7"].Value = "February";
        
        sheet.Range["C2"].Value = "10";
        sheet.Range["C3"].Value = "15";
        sheet.Range["C4"].Value = "9";
        sheet.Range["C5"].Value = "7";
        sheet.Range["C6"].Value = "8";
        sheet.Range["C7"].Value = "10";
        
        // 创建数据透视表缓存
        CellRange dataRange = sheet.Range["A1:C7"];
        PivotCache cache = workbook.PivotCaches.Add(dataRange);
        
        // 添加数据透视表
        PivotTable pt = sheet.PivotTables.Add("Pivot Table", sheet.Range["E10"], cache);
        
        // 配置行字段
        PivotField pf = pt.PivotFields["Product"] as PivotField;
        pf.Axis = AxisTypes.Row;
        
        PivotField pf2 = pt.PivotFields["Month"] as PivotField;
        pf2.Axis = AxisTypes.Row;
        
        // 配置数据字段
        pt.DataFields.Add(pt.PivotFields["Count"], "SUM of Count", SubtotalTypes.Sum);
        
        // 设置样式
        pt.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium12;
        
        // 计算数据并调整列宽
        pt.CalculateData();
        sheet.AutoFitColumn(5);
        sheet.AutoFitColumn(6);
        
        // 保存文件
        workbook.SaveToFile("CreatePivotTable_output.xlsx", ExcelVersion.Version2010);
        workbook.Dispose();
        
        Console.WriteLine("数据透视表创建成功!");
    }
}

生成结果预览

实用技巧

更改字段布局

除了行字段和数据字段,还可以将字段添加到列区域或筛选区域:

// 将字段添加到列区域
PivotField columnField = pt.PivotFields["Month"] as PivotField;
columnField.Axis = AxisTypes.Column;

// 将字段添加到筛选区域
PivotField filterField = pt.PivotFields["Product"] as PivotField;
filterField.Axis = AxisTypes.Page;

使用不同的汇总方式

根据分析需求,可以选择不同的汇总类型:

// 计数
pt.DataFields.Add(pt.PivotFields["Count"], "Count", SubtotalTypes.Count);

// 平均值
pt.DataFields.Add(pt.PivotFields["Count"], "Average", SubtotalTypes.Average);

// 最大值
pt.DataFields.Add(pt.PivotFields["Count"], "Max", SubtotalTypes.Max);

自定义数据透视表选项

可以进一步配置数据透视表的显示选项:

// 显示经典数据透视表布局
pt.ShowClassicPivotTableLayout = true;

// 禁用字段列表
pt.FieldPrintOptions.ShowFieldList = false;

结论

本文介绍了如何使用 C# 在 Excel 中创建数据透视表。通过合理配置数据源、字段布局和样式选项,可以快速生成专业的数据分析报表。

掌握这些技术后,你可以:

  • 扩展为从数据库读取真实业务数据
  • 添加更多字段和更复杂的分组逻辑
  • 应用条件格式增强可视化效果
  • 批量生成多张数据透视表进行分析

数据透视表是 Excel 数据分析的核心功能之一,将其集成到自动化流程中可以大大提高报表生成效率。

到此这篇关于使用C#实现在Excel中创建和配置数据透视表的文章就介绍到这了,更多相关C# Excel创建数据透视表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中实现可变参数实例

    C#中实现可变参数实例

    这篇文章主要介绍了C#中实现可变参数实例,本文演示使用params 实现可变数量的参数,并且这些参数的类型可以不同,需要的朋友可以参考下
    2015-01-01
  • C#图片压缩的实现方法

    C#图片压缩的实现方法

    一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的。尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图。
    2013-02-02
  • C# 使用PrintDocument类打印标签的方法

    C# 使用PrintDocument类打印标签的方法

    本文介绍打印机初步配置,以及实现方法,标签主要展示资产基本信息以及二维码,对C# 使用PrintDocument类打印标签的详细过程感兴趣的朋友一起看看吧
    2022-04-04
  • 深入理解C#的数组

    深入理解C#的数组

    本篇文章主要介绍了C#的数组,数组是一种数据结构,详细的介绍了数组的声明和访问等,有兴趣的可以了解一下。
    2016-11-11
  • C#实现文件与Base64的相互转换

    C#实现文件与Base64的相互转换

    本文主要介绍了C#实现文件与Base64的相互转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C#实现调用迅雷下载的方法

    C#实现调用迅雷下载的方法

    这篇文章主要介绍了C#实现调用迅雷下载的方法,非常实用的一个技巧,对于进行C#程序设计有很好的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C# API中模型与它们的接口设计详解

    C# API中模型与它们的接口设计详解

    这篇文章主要给大家介绍了关于C# API中模型与它们的接口设计的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • C#关键字Check简单介绍

    C#关键字Check简单介绍

    这篇文章主要介绍了C#关键字Check功能描述及注意事项,checke关键字主要用于对整型类型算术运算和转换显式启用溢出检查,本文通过程序演示给大家详细介绍,需要的朋友一起看看吧
    2022-04-04
  • C#实现利用泛型将DataSet转为Model的方法

    C#实现利用泛型将DataSet转为Model的方法

    这篇文章主要介绍了C#实现利用泛型将DataSet转为Model的方法,实例分析了C#泛型的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • MVVM简化的Messager类实例代码

    MVVM简化的Messager类实例代码

    这篇文章主要给大家介绍了关于MVVM简化的Messager类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06

最新评论