C#使用Spire.XLS在Excel中创建数据透视表

 更新时间:2025年09月03日 08:26:59   作者:缺点内向  
在C#环境下进行Excel自动化,有多种方案可供选择,例如Microsoft Office Interop、EPPlus等,但对于需要处理复杂Excel功能,尤其是数据透视表、图表等高级特性,Spire.XLS凭借其独特的优势脱颖而出,所以本文给大家介绍了如何使用Spire.XLS在Excel中创建数据透视表

引言

在 C# 环境下进行 Excel 自动化,有多种方案可供选择,例如 Microsoft Office Interop、EPPlus 等。但对于需要处理复杂 Excel 功能,尤其是数据透视表、图表等高级特性,并且注重性能和部署便利性的场景,Spire.XLS 凭借其独特的优势脱颖而出。

为什么选择 Spire.XLS 进行 Excel 自动化?

Spire.XLS 的核心特点与优势:

  • 无需安装 Office: Spire.XLS 是一个独立的 .NET 组件,不依赖于 Microsoft Office 的安装,这极大地简化了部署流程,避免了兼容性问题。
  • 高性能: 针对大数据量和复杂操作进行了优化,处理大型 Excel 文件时表现出色。
  • API 丰富且直观: 提供了全面且易于理解的 API 接口,能够覆盖 Excel 的几乎所有功能,包括单元格操作、样式设置、图表、数据验证、以及本文重点探讨的数据透视表等。
  • 跨平台支持: 支持 .NET Framework、.NET Core、.NET 5/6/7 等,可在 Windows、Linux、macOS 等多种环境中使用。
  • 出色的数据透视表支持: Spire.XLS 提供了强大的 API 来创建、配置和操作数据透视表,包括设置行/列字段、值字段、筛选器、计算字段、样式等,功能非常完善。

Spire.XLS 创建数据透视表核心步骤详解

1. 安装 Spire.XLS 库

首先,您需要在您的 C# 项目中安装 Spire.XLS。最简单的方式是通过 NuGet 包管理器:

  1. 打开 Visual Studio。
  2. 在“解决方案资源管理器”中,右键点击您的项目,选择“管理 NuGet 程序包”。
  3. 在“浏览”选项卡中搜索 Spire.XLS
  4. 点击“安装”。

2. 准备数据源

数据透视表需要一个结构化的数据源。通常,这意味着您的数据应该在一个连续的单元格区域中,并且第一行作为表头(字段名称)。

例如,我们准备如下销售数据:

销售员产品区域销售额订单日期
张三笔记本华东50002023/1/1
李四手机华南30002023/1/2
王五笔记本华北60002023/1/3
张三手机华东45002023/1/4
李四平板华南20002023/1/5
王五笔记本华中70002023/1/6

3. 代码示例 1: 初始化工作簿与添加数据

以下代码演示如何创建一个新的 Excel 工作簿,并填充上述销售数据作为数据透视表的源数据。

using Spire.Xls;
using Spire.Xls.PivotTable;
using System;

namespace SpireXlsPivotTableDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的工作簿
            Workbook workbook = new Workbook();
            // 获取第一个工作表
            Worksheet sheet = workbook.Worksheets[0];
            sheet.Name = "原始数据";

            // 写入表头
            sheet.Range["A1"].Value = "销售员";
            sheet.Range["B1"].Value = "产品";
            sheet.Range["C1"].Value = "区域";
            sheet.Range["D1"].Value = "销售额";
            sheet.Range["E1"].Value = "订单日期";

            // 写入数据
            string[,] data = new string[,]
            {
                {"张三", "笔记本", "华东", "5000", "2023/1/1"},
                {"李四", "手机", "华南", "3000", "2023/1/2"},
                {"王五", "笔记本", "华北", "6000", "2023/1/3"},
                {"张三", "手机", "华东", "4500", "2023/1/4"},
                {"李四", "平板", "华南", "2000", "2023/1/5"},
                {"王五", "笔记本", "华中", "7000", "2023/1/6"},
                {"张三", "平板", "华北", "3500", "2023/1/7"},
                {"李四", "笔记本", "华东", "5500", "2023/1/8"},
                {"王五", "手机", "华南", "4000", "2023/1/9"},
            };

            for (int i = 0; i < data.GetLength(0); i++)
            {
                for (int j = 0; j < data.GetLength(1); j++)
                {
                    sheet.Range[i + 2, j + 1].Value = data[i, j];
                }
            }

            // 调整列宽以适应内容
            sheet.AutoFitColumn(1);
            sheet.AutoFitColumn(2);
            sheet.AutoFitColumn(3);
            sheet.AutoFitColumn(4);
            sheet.AutoFitColumn(5);

            Console.WriteLine("原始数据已准备完成。");

            // 后续将在这里添加创建数据透视表的代码
            // ...
        }
    }
}

4. 代码示例 2: 创建和配置数据透视表

接下来,我们将在同一个工作簿中创建一个新的工作表,并在其中创建并配置数据透视表。我们将以“销售员”作为行字段,“产品”作为列字段,并汇总“销售额”。

              // ... (接上一个代码示例)

            // 定义数据源范围
            CellRange dataRange = sheet.Range["A1:E10"]; // 包含表头和所有数据

            // 添加一个新的工作表用于放置数据透视表
            Worksheet pivotSheet = workbook.Worksheets.Add("销售数据透视表");
            
            // 创建一个数据透视缓存
            // PivotCache cache = workbook.PivotCaches.Add(dataRange); // 也可以直接使用数据范围创建
            
            // 添加数据透视表到新的工作表,指定其显示位置为 A1
            // 第一个参数是透视表的名称,第二个参数是透视表在目标工作表中的起始位置
            // 第三个参数是数据源范围
            PivotTable pt = pivotSheet.PivotTables.Add("销售分析透视表", pivotSheet.Range["A1"], dataRange);
            
            // 设置行字段
            // 将“销售员”字段添加到行区域
            PivotField rowField = pt.PivotFields["销售员"];
            rowField.Axis = AxisTypes.Row;
            // 启用重复项目标签,使得每个销售员的名称都显示
            rowField.RepeatItemLabels = true; 
            // 启用自动显示,如果数据量大,可以自动显示前N个或后N个
            rowField.IsAutoShow = true;

            // 设置列字段
            // 将“产品”字段添加到列区域
            PivotField columnField = pt.PivotFields["产品"];
            columnField.Axis = AxisTypes.Column;

            // 设置值字段 (数据区域)
            // 将“销售额”字段添加到数据区域,默认聚合方式为求和
            PivotField dataField = pt.PivotFields["销售额"];
            // 设置数据字段的聚合函数为求和
            dataField.Subtotals = SubtotalTypes.Sum; 
            dataField.NumberFormat = "#,##0.00"; // 设置销售额的数字格式

            // 设置筛选器 (可选)
            // 如果需要按区域筛选,可以添加筛选器字段
            // PivotField filterField = pt.PivotFields["区域"];
            // filterField.Axis = AxisTypes.Page; // Page表示筛选器区域

            // 刷新数据透视表
            pt.CalculateData();

            // 自动调整透视表所在列的宽度,使其内容完全显示
            pivotSheet.AutoFitColumns();

            Console.WriteLine("数据透视表已创建并配置完成。");

            // ... (保存文件代码)

对字段设置的详细解释:

  • AxisTypes.Row: 将字段放置在数据透视表的行区域,用于展开行方向的数据。
  • AxisTypes.Column: 将字段放置在数据透视表的列区域,用于展开列方向的数据。
  • AxisTypes.Page: 将字段放置在数据透视表的筛选器区域(旧称“页字段”),允许用户通过下拉列表筛选数据。
  • SubtotalTypes.Sum: 设置值字段的聚合方式为求和。Spire.XLS 支持多种聚合函数,如 Count (计数), Average (平均值), Max (最大值), Min (最小值), Product (乘积), CountNums (数字计数) 等。
  • NumberFormat: 用于设置值字段的数字显示格式,例如货币、百分比、日期等。
  • RepeatItemLabels = true: 使得行/列字段的每个项目标签都重复显示,而不是只显示一次。这在某些报告场景下有助于清晰度。
  • IsAutoShow = true: 启用自动显示功能,对于行/列字段,可以自动显示前 N 个或后 N 个项目,这在数据量大时很有用。

5. 代码示例 3: 保存 Excel 文件

最后一步是将包含原始数据和数据透视表的 Excel 文件保存到指定路径。

            // ... (接上一个代码示例)

            // 保存工作簿到文件
            string outputPath = "DataPivotTableDemo.xlsx";
            workbook.SaveToFile(outputPath, ExcelVersion.Version2016); // 可以指定保存为不同版本的Excel文件

            Console.WriteLine($"Excel 文件已保存到: {System.IO.Path.GetFullPath(outputPath)}");
            Console.WriteLine("按任意键退出...");
            Console.ReadKey();
        }
    }
}

进阶应用与常见问题

进阶技巧

  • 刷新数据透视表: 当源数据发生变化时,需要刷新数据透视表以反映最新数据。可以通过 pt.CalculateData() 方法实现。
  • 设置透视表样式: Spire.XLS 提供了丰富的 API 来设置数据透视表的样式,例如 pt.BuiltInStyle 可以应用内置样式,或者自定义边框、字体、背景色等。
  • 处理多个数据源: 虽然 Spire.XLS 主要支持单个连续区域作为数据源,但对于更复杂的多数据源场景,您可能需要先将数据合并到一个工作表,或者考虑使用更高级的数据模型功能(如果 Spire.XLS 支持)。
  • 创建数据透视图: 可以基于数据透视表创建动态的数据透视图,从而更直观地展示分析结果。Spire.XLS 也提供了相应的 API:
// get the first pivot table in the worksheet
IPivotTable pivotTable = pivotSheet.PivotTables[0];
//create a clustered column chart based on the pivot table
Chart chart = pivotSheet.Charts.Add(ExcelChartType.ColumnClustered, pivotTable);
chart.TopRow = 12;
chart.LeftColumn = 1;
chart.RightColumn = 8;
chart.BottomRow = 30;
chart.ChartTitle = "产品销售分析";
chart.PrimaryCategoryAxis.MultiLevelLable = true;
  • 禁用数据透视表功能区: 在某些特定场景下,您可能希望限制用户对数据透视表的修改,可以通过禁用其功能区:
// Get the first pivot table from the sheet 
XlsPivotTable pt = pivotSheet.PivotTables[0] as XlsPivotTable;
//Disable ribbon for this pivot table
pt.EnableWizard = false;

注意事项

  • 数据源格式: 确保数据源的第一行是有效的字段名称,且数据区域是连续的,没有空行或空列。
  • 字段名称匹配: 在设置 PivotFields 时,请确保使用的字段名称与数据源中的表头完全匹配(区分大小写)。
  • 性能优化: 对于超大数据集,考虑分批处理或优化数据加载方式。Spire.XLS 在性能方面表现优秀,但合理的代码结构仍然重要。
  • 许可证: Spire.XLS 是商业组件,在试用版中可能会有水印或功能限制。在生产环境中使用需要购买相应的许可证。

以上就是C#使用Spire.XLS在Excel中创建数据透视表的详细内容,更多关于C# Excel创建数据透视表的资料请关注脚本之家其它相关文章!

相关文章

  • C#通过抽象工厂模式造车

    C#通过抽象工厂模式造车

    这篇文章介绍了C#通过抽象工厂模式造车的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • C#使用动态规划解决0-1背包问题实例分析

    C#使用动态规划解决0-1背包问题实例分析

    这篇文章主要介绍了C#使用动态规划解决0-1背包问题,实例分析了C#动态规划算法的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#读写json文件操作的正确方法

    C#读写json文件操作的正确方法

    在现代开发中JSON已经成为了一种非常流行的数据格式,下面这篇文章主要给大家介绍了关于C#读写json文件操作的正确方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • C#实现将javascript文件编译成dll文件的方法

    C#实现将javascript文件编译成dll文件的方法

    这篇文章主要介绍了C#实现将javascript文件编译成dll文件的方法,涉及C#编译生成dll动态链接库文件的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • c#单例模式(Singleton)的6种实现

    c#单例模式(Singleton)的6种实现

    这篇文章主要介绍了c#单例模式(Singleton)的6种实现 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C#实战之备忘录的制作详解

    C#实战之备忘录的制作详解

    这篇文章主要为大家介绍了如何利用C#制作一个备忘录,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以学习一下
    2022-02-02
  • C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例)

    C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例)

    这篇文章主要介绍了C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C# VTK 移动旋转交互功能实现

    C# VTK 移动旋转交互功能实现

    对vtk场景中一个或多个选中物体进行移动旋转,今天通过本文给大家分享C# VTK 移动旋转交互功能实现,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • C# winfrom实现读取修改xml

    C# winfrom实现读取修改xml

    这篇文章主要为大家详细介绍了C# winfrom实现读取修改xml的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • C#中进程的挂起与恢复

    C#中进程的挂起与恢复

    这篇文章主要介绍了C#中进程的挂起与恢复操作方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03

最新评论