C#代码实现在Excel中为数据透视表添加筛选器

 更新时间:2026年05月19日 08:24:16   作者:2501_93070778  
数据透视表中的筛选功能可帮助用户根据特定条件缩小显示的数据范围,本文将演示如何在 C# 中为 Excel 数据透视表添加筛选器,希望对大家有所帮助

数据透视表中的筛选功能可帮助用户根据特定条件缩小显示的数据范围。通过添加筛选器,用户可以聚焦于与分析目标最相关的数据子集,从而更高效、更有针对性地进行数据分析与探索。本文将演示如何在 C# 中为 Excel 数据透视表添加筛选器。

环境准备

开始之前,需要在 .NET 项目中添加相关 Excel 处理库的 DLL 引用。您可以通过下载安装包手动引用 DLL,也可以直接通过 NuGet 安装所需组件。

PM> Install-Package Spire.XLS

在 C# 中为 Excel 数据透视表添加报表筛选器

通过 Excel 操作组件提供的相关 API,可以轻松为数据透视表添加报表筛选器。具体步骤如下:

  1. 创建 Workbook 类的对象。
  2. 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
  3. 通过 Workbook.Worksheets[index] 属性获取指定工作表。
  4. 使用 Worksheet.PivotTables[index] 属性获取指定的数据透视表。
  5. 使用 PivotReportFilter 类创建报表筛选器。
  6. 调用 XlsPivotTable.ReportFilters.Add() 方法将筛选器添加到数据透视表中。
  7. 使用 Workbook.SaveToFile() 方法保存结果文件。

完整示例代码如下:

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;

namespace AddReportFilter
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建 Workbook 类对象
            Workbook workbook = new Workbook();

            // 加载 Excel 文件
            workbook.LoadFromFile("Sample.xlsx");

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

            // 获取第一个数据透视表
            XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;

            // 创建报表筛选器
            PivotReportFilter reportFilter = new PivotReportFilter("Product", true);

            // 将报表筛选器添加到数据透视表
            pt.ReportFilters.Add(reportFilter);

            // 保存结果文件
            workbook.SaveToFile("AddReportFilter.xlsx", FileFormat.Version2016);

            workbook.Dispose();
        }
    }
}

在 C# 中为 Excel 数据透视表的行字段添加筛选器

可以为数据透视表中的指定行字段添加“值筛选”或“标签筛选”,从而更灵活地筛选和分析数据。具体步骤如下:

  1. 创建 Workbook 类对象。
  2. 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
  3. 通过 Workbook.Worksheets[index] 属性获取指定工作表。
  4. 使用 Worksheet.PivotTables[index] 属性获取指定的数据透视表。
  5. 调用 XlsPivotTable.RowFields[index].AddValueFilter()XlsPivotTable.RowFields[index].AddLabelFilter() 方法,为指定行字段添加值筛选或标签筛选。
  6. 使用 XlsPivotTable.CalculateData() 方法重新计算数据透视表数据。
  7. 使用 Workbook.SaveToFile() 方法保存结果文件。

完整示例代码如下:

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;

namespace AddRowFilter
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建 Workbook 类对象
            Workbook workbook = new Workbook();

            // 加载 Excel 文件
            workbook.LoadFromFile("Sample.xlsx");

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

            // 获取第一个数据透视表
            XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;

            // 为数据透视表中的第一个行字段添加值筛选
            pt.RowFields[0].AddValueFilter(
                PivotValueFilterType.GreaterThan,
                pt.DataFields[0],
                5000,
                null);

            // 或为数据透视表中的第一个行字段添加标签筛选
            //pt.RowFields[0].AddLabelFilter(PivotLabelFilterType.Equal, "Mike", null);

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

            // 保存结果文件
            workbook.SaveToFile("AddRowFilter.xlsx", FileFormat.Version2016);

            workbook.Dispose();
        }
    }
}

在 C# 中为 Excel 数据透视表的列字段添加筛选器

可以为数据透视表中的指定列字段添加“值筛选”或“标签筛选”,以便更精准地控制数据显示内容。具体步骤如下:

  1. 创建 Workbook 类对象。
  2. 使用 Workbook.LoadFromFile() 方法加载 Excel 文件。
  3. 通过 Workbook.Worksheets[index] 属性获取指定工作表。
  4. 使用 Worksheet.PivotTables[index] 属性获取指定的数据透视表。
  5. 调用 XlsPivotTable.ColumnFields[index].AddValueFilter()XlsPivotTable.ColumnFields[index].AddLabelFilter() 方法,为指定列字段添加值筛选或标签筛选。
  6. 使用 XlsPivotTable.CalculateData() 方法重新计算数据透视表数据。
  7. 使用 Workbook.SaveToFile() 方法保存结果文件。

完整示例代码如下:

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;

namespace AddColumnFilter
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建 Workbook 类对象
            Workbook workbook = new Workbook();

            // 加载 Excel 文件
            workbook.LoadFromFile("Sample.xlsx");

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

            // 获取第一个数据透视表
            XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;

            // 为数据透视表中的第一个列字段添加标签筛选
            pt.ColumnFields[0].AddLabelFilter(
                PivotLabelFilterType.Equal,
                "Laptop",
                null);

            // 或为数据透视表中的第一个列字段添加值筛选
            // pt.ColumnFields[0].AddValueFilter(
            //     PivotValueFilterType.Between,
            //     pt.DataFields[0],
            //     5000,
            //     10000);

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

            // 保存结果文件
            workbook.SaveToFile("AddColumnFilter.xlsx", FileFormat.Version2016);

            workbook.Dispose();
        }
    }
}

知识扩展

在Excel数据透视表中,添加筛选器本质上就是将数据源中的某个字段放入数据透视表的 报表筛选区域(Page Fields / Report Filter)。以下使用主流Excel操作库的C#代码示例。

1.使用 Spire.XLS(推荐,无需安装Excel)

Spire.XLS是国内团队开发的专业Excel处理库,无需安装Microsoft Office,API设计简洁。

安装

通过NuGet安装:

Install-Package Spire.XLS

添加报表筛选器(Report Filter)

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;

class Program
{
    static void Main(string[] args)
    {
        // 1. 创建Workbook对象并加载Excel文件
        Workbook workbook = new Workbook();
        workbook.LoadFromFile("Sample.xlsx");

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

        // 3. 获取第一个数据透视表
        XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;

        // 4. 创建报表筛选器(指定字段名和是否自动添加所有项)
        PivotReportFilter reportFilter = new PivotReportFilter("Product", true);

        // 5. 添加筛选器到数据透视表
        pt.ReportFilters.Add(reportFilter);

        // 6. 保存文件
        workbook.SaveToFile("AddReportFilter.xlsx", FileFormat.Version2016);
        workbook.Dispose();
    }
}

上述代码将数据源中的"Product"字段添加到数据透视表的筛选器区域。

为行字段添加值筛选或标签筛选

如果需要更精细的筛选(如"销售额大于10000"),可以为指定行字段添加值筛选:

using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;

class Program
{
    static void Main(string[] args)
    {
        Workbook workbook = new Workbook();
        workbook.LoadFromFile("Sample.xlsx");

        Worksheet sheet = workbook.Worksheets[0];
        XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;

        // 为第一个行字段添加值筛选:筛选出销售额大于10000的数据
        pt.RowFields[0].AddValueFilter(
            PivotFilterType.GreaterThan,  // 筛选条件:大于
            "Sum of Amount",               // 值字段名称
            10000                          // 阈值
        );

        // 重新计算数据
        pt.CalculateData();

        workbook.SaveToFile("AddValueFilter.xlsx", FileFormat.Version2016);
        workbook.Dispose();
    }
}

也可以添加标签筛选(如"产品名称包含'A'"):

// 为行字段添加标签筛选:筛选出产品名称包含"P"的数据
pt.RowFields[0].AddLabelFilter(PivotFilterType.Contains, "P");

2.使用 Microsoft.Office.Interop.Excel(需要安装Excel)

这是最传统的方式,需要系统安装Microsoft Office Excel,适合Windows平台。

安装

在项目中添加COM引用:右键项目 → 添加引用 → COM → 选择 Microsoft Excel XX.X Object Library

添加报表筛选器示例

using Excel = Microsoft.Office.Interop.Excel;

class Program
{
    static void Main(string[] args)
    {
        // 1. 创建Excel应用程序对象
        Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = false;

        // 2. 打开工作簿
        Excel.Workbook workbook = excelApp.Workbooks.Open(@"C:\Sample.xlsx");

        // 3. 获取工作表和数据透视表
        Excel.Worksheet worksheet = workbook.Sheets["Sheet1"];
        Excel.PivotTable pivotTable = worksheet.PivotTables("PivotTable1");

        // 4. 获取要作为筛选器的字段并设置其方向为报表筛选区域(Page Field)
        Excel.PivotField filterField = pivotTable.PivotFields("Product");
        filterField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;
        filterField.Position = 1;

        // 5. 可选:允许多选
        filterField.EnableMultiplePageItems = true;

        // 6. 设置筛选值(例如只显示"TV")
        filterField.ClearAllFilters();
        filterField.CurrentPage = "TV";

        // 7. 刷新数据透视表
        pivotTable.RefreshTable();

        // 8. 保存并退出
        workbook.Save();
        workbook.Close();
        excelApp.Quit();
    }
}

关键点说明:

  • Orientation = xlPageField:将字段放置到报表筛选区域
  • CurrentPage:设置当前选中的筛选值
  • EnableMultiplePageItems = true:允许多选(默认为单选)

3.使用 Aspose.Cells(功能强大,无需安装Excel)

Aspose.Cells是成熟的商业Excel处理方案,功能全面。

安装

Install-Package Aspose.Cells

添加筛选器示例

using Aspose.Cells;
using Aspose.Cells.Pivot;

class Program
{
    static void Main(string[] args)
    {
        // 1. 加载工作簿
        Workbook workbook = new Workbook("Sample.xlsx");

        // 2. 获取数据透视表
        PivotTable pivotTable = workbook.Worksheets[0].PivotTables[0];

        // 3. 添加页面字段(筛选器)
        pivotTable.AddFieldToArea(PivotFieldType.Page, pivotTable.Fields["Product"]);

        // 4. 可选:设置当前筛选选项
        PivotField pageField = pivotTable.PageFields[0];
        pageField.ClearAllFilters();

        // 要筛选的值
        pageField.AddPageItem("TV");

        // 5. 刷新数据并保存
        pivotTable.RefreshData();
        pivotTable.CalculateData();
        workbook.Save("Output.xlsx");
    }
}

按索引和名称显示报表筛选页面

Aspose.Cells还提供了ShowReportFilterPage系列方法,可以将报表筛选器的每一项输出为独立工作表:

// 根据字段显示报表筛选页面
pivotTable.ShowReportFilterPage(pivotTable.PageFields[0]);

// 根据索引显示
pivotTable.ShowReportFilterPageByIndex(pivotTable.PageFields[0].Position);

// 根据名称显示
pivotTable.ShowReportFilterPageByName(pivotTable.PageFields[0].Name);

4.使用 EPPlus(开源免费,需注意版本限制)

EPPlus是开源免费库(5.x及以下版本),但添加报表筛选器的功能支持有限。

安装

Install-Package EPPlus

添加筛选器示例

using OfficeOpenXml;
using OfficeOpenXml.Table.PivotTable;

class Program
{
    static void Main(string[] args)
    {
        using (var package = new ExcelPackage(new FileInfo("Sample.xlsx")))
        {
            var worksheet = package.Workbook.Worksheets[0];
            var pivotTable = worksheet.PivotTables[0];

            // 获取要作为筛选器的字段
            var pivotField = pivotTable.Fields["Product"];

            // 添加为报表筛选区域
            pivotTable.PageFields.Add(pivotField);

            // 保存文件
            package.Save();
        }
    }
}

局限性提醒:有开发者反馈EPPlus对PageFields功能支持不够完善,上述代码可能需要根据实际版本调整。如果需要可靠的筛选器功能,建议使用Spire.XLS或Aspose.Cells。

各方案对比

方案是否需要安装Excel收费情况优点适合场景
Spire.XLS商业(有免费版)API简洁,功能完整,无需安装Office绝大多数场景,推荐
Interop免费(需要Excel授权)原生控制,支持所有Excel功能Windows环境且已安装Excel的项目
Aspose.Cells商业功能最强大,企业级支持大规模/复杂报表处理需求
EPPlus开源免费(5.x)免费开源,轻量简单场景,可接受功能限制

总结

通过为 Excel 数据透视表添加报表筛选器、行字段筛选器以及列字段筛选器,可以更加灵活地控制和分析数据内容。本文演示了如何在 C# 中使用相关 API 为数据透视表设置不同类型的筛选条件,包括值筛选和标签筛选,并介绍了重新计算数据透视表及保存结果文件的方法。借助这些功能,开发者可以更高效地实现 Excel 数据的自动化筛选与分析,提升数据处理效率和报表的可读性。

到此这篇关于C#代码实现在Excel中为数据透视表添加筛选器的文章就介绍到这了,更多相关C# Excel添加筛选器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Unity UGUI实现滑动翻页直接跳转页数

    Unity UGUI实现滑动翻页直接跳转页数

    这篇文章主要为大家详细介绍了Unity UGUI实现滑动翻页,直接跳转页数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 详解CLR的内存分配和回收机制

    详解CLR的内存分配和回收机制

    本文详细讲解了CLR的内存分配和回收机制,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#实现串口通信的四种灵活策略和避坑指南

    C#实现串口通信的四种灵活策略和避坑指南

    这篇文章主要为大家详细介绍了C#实现串口通信的四种灵活策略和避坑的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-01-01
  • C#微信公众号开发之服务器配置

    C#微信公众号开发之服务器配置

    这篇文章介绍了C#微信公众号开发之服务器配置,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#中BitmapImage与BitmapSource接口的区别对比小结

    C#中BitmapImage与BitmapSource接口的区别对比小结

    BitmapImage和BitmapSource都可以用于表示和显示图像,本文就来介绍一下C#中BitmapImage与BitmapSource接口的区别对比,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • C# wpf常用窗口特效的实现代码

    C# wpf常用窗口特效的实现代码

    在C# WPF应用程序开发中,窗口特效是提升用户体验的重要手段,本文将介绍几种常用的窗口特效及其实现方法,包括动画、阴影、模糊效果等,希望对大家有所帮助
    2024-11-11
  • C#操作xml文件之Linq To Xml详解

    C#操作xml文件之Linq To Xml详解

    Linq To Xml,不看其他,单纯的看名字都能感觉到,其可以使用灵活且强大的Linq语法,同时也可以使用lambda以及Xpath定位。本文将利用C#实现操作Linq To Xml,感兴趣的可以了解一下
    2022-11-11
  • Socket不能选择本地IP连接问题如何解决

    Socket不能选择本地IP连接问题如何解决

    本文将介绍一个不要手动,要用程序自动实现 ,可以绑定本地的任何IP地址,有需求的朋友可以参考下
    2012-11-11
  • WPF程序将控件所呈现的内容保存成图像

    WPF程序将控件所呈现的内容保存成图像

    这篇文章介绍了WPF程序将控件所呈现的内容保存成图像的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • c#匹配整数和小数的正则表达式

    c#匹配整数和小数的正则表达式

    c#中使用正则表达式需要加入using System.Text.RegularExpressions的引用
    2010-12-12

最新评论