使用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#利用itext实现PDF页面处理与切分

    C#利用itext实现PDF页面处理与切分

    这篇文章主要介绍了如何在C#中使用itext做一个pdf的页面大小一致性处理,然后再根据数据切分出需要的pdf,感兴趣的小伙伴可以了解一下
    2022-04-04
  • C#实现ComboBox变色的示例代码

    C#实现ComboBox变色的示例代码

    这篇文章主要为大家详细介绍了C#如何实现ComboBox变色的效果,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-01-01
  • C#资源释放方法实例分析

    C#资源释放方法实例分析

    这篇文章主要介绍了C#资源释放方法,结合实例详细分析了C#资源释放的具体方法与相关技巧,需要的朋友可以参考下
    2016-02-02
  • C#实现简单的飞行棋小游戏

    C#实现简单的飞行棋小游戏

    这篇文章主要为大家详细介绍了C#实现简单的飞行棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
    2021-11-11
  • C#对XML文件的各种操作实现方法

    C#对XML文件的各种操作实现方法

    C#对XML文件的各种操作实现方法,需要的朋友可以参考一下
    2013-04-04
  • C#将字母或数字加密成字母的方法

    C#将字母或数字加密成字母的方法

    这篇文章主要介绍了C#将字母或数字加密成字母的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • c# 循环语句的使用方法

    c# 循环语句的使用方法

    这篇文章主要介绍了c# 循环语句的使用方法,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 浅析C#数据类型转换的几种形式

    浅析C#数据类型转换的几种形式

    本篇文章是对C#中数据类型转换的几种形式进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • C#以流方式读socket超时设置的实例

    C#以流方式读socket超时设置的实例

    这篇文章主要为大家详细介绍了C#以流方式读socket超时设置的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C#简单的通用基础字典实现方法

    C#简单的通用基础字典实现方法

    这篇文章主要介绍了C#简单的通用基础字典实现方法,包含了字典的索引、记录、回调与查询等技巧,需要的朋友可以参考下
    2014-12-12

最新评论