C#代碼實(shí)現(xiàn)在Excel中為數(shù)據(jù)透視表添加篩選器
數(shù)據(jù)透視表中的篩選功能可幫助用戶根據(jù)特定條件縮小顯示的數(shù)據(jù)范圍。通過添加篩選器,用戶可以聚焦于與分析目標(biāo)最相關(guān)的數(shù)據(jù)子集,從而更高效、更有針對性地進(jìn)行數(shù)據(jù)分析與探索。本文將演示如何在 C# 中為 Excel 數(shù)據(jù)透視表添加篩選器。
環(huán)境準(zhǔn)備
開始之前,需要在 .NET 項(xiàng)目中添加相關(guān) Excel 處理庫的 DLL 引用。您可以通過下載安裝包手動引用 DLL,也可以直接通過 NuGet 安裝所需組件。
PM> Install-Package Spire.XLS
在 C# 中為 Excel 數(shù)據(jù)透視表添加報(bào)表篩選器
通過 Excel 操作組件提供的相關(guān) API,可以輕松為數(shù)據(jù)透視表添加報(bào)表篩選器。具體步驟如下:
- 創(chuàng)建
Workbook類的對象。 - 使用
Workbook.LoadFromFile()方法加載 Excel 文件。 - 通過
Workbook.Worksheets[index]屬性獲取指定工作表。 - 使用
Worksheet.PivotTables[index]屬性獲取指定的數(shù)據(jù)透視表。 - 使用
PivotReportFilter類創(chuàng)建報(bào)表篩選器。 - 調(diào)用
XlsPivotTable.ReportFilters.Add()方法將篩選器添加到數(shù)據(jù)透視表中。 - 使用
Workbook.SaveToFile()方法保存結(jié)果文件。
完整示例代碼如下:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
namespace AddReportFilter
{
internal class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 類對象
Workbook workbook = new Workbook();
// 加載 Excel 文件
workbook.LoadFromFile("Sample.xlsx");
// 獲取第一個工作表
Worksheet sheet = workbook.Worksheets[0];
// 獲取第一個數(shù)據(jù)透視表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 創(chuàng)建報(bào)表篩選器
PivotReportFilter reportFilter = new PivotReportFilter("Product", true);
// 將報(bào)表篩選器添加到數(shù)據(jù)透視表
pt.ReportFilters.Add(reportFilter);
// 保存結(jié)果文件
workbook.SaveToFile("AddReportFilter.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}在 C# 中為 Excel 數(shù)據(jù)透視表的行字段添加篩選器
可以為數(shù)據(jù)透視表中的指定行字段添加“值篩選”或“標(biāo)簽篩選”,從而更靈活地篩選和分析數(shù)據(jù)。具體步驟如下:
- 創(chuàng)建
Workbook類對象。 - 使用
Workbook.LoadFromFile()方法加載 Excel 文件。 - 通過
Workbook.Worksheets[index]屬性獲取指定工作表。 - 使用
Worksheet.PivotTables[index]屬性獲取指定的數(shù)據(jù)透視表。 - 調(diào)用
XlsPivotTable.RowFields[index].AddValueFilter()或XlsPivotTable.RowFields[index].AddLabelFilter()方法,為指定行字段添加值篩選或標(biāo)簽篩選。 - 使用
XlsPivotTable.CalculateData()方法重新計(jì)算數(shù)據(jù)透視表數(shù)據(jù)。 - 使用
Workbook.SaveToFile()方法保存結(jié)果文件。
完整示例代碼如下:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
namespace AddRowFilter
{
internal class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 類對象
Workbook workbook = new Workbook();
// 加載 Excel 文件
workbook.LoadFromFile("Sample.xlsx");
// 獲取第一個工作表
Worksheet sheet = workbook.Worksheets[0];
// 獲取第一個數(shù)據(jù)透視表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 為數(shù)據(jù)透視表中的第一個行字段添加值篩選
pt.RowFields[0].AddValueFilter(
PivotValueFilterType.GreaterThan,
pt.DataFields[0],
5000,
null);
// 或?yàn)閿?shù)據(jù)透視表中的第一個行字段添加標(biāo)簽篩選
//pt.RowFields[0].AddLabelFilter(PivotLabelFilterType.Equal, "Mike", null);
// 重新計(jì)算數(shù)據(jù)透視表數(shù)據(jù)
pt.CalculateData();
// 保存結(jié)果文件
workbook.SaveToFile("AddRowFilter.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}在 C# 中為 Excel 數(shù)據(jù)透視表的列字段添加篩選器
可以為數(shù)據(jù)透視表中的指定列字段添加“值篩選”或“標(biāo)簽篩選”,以便更精準(zhǔn)地控制數(shù)據(jù)顯示內(nèi)容。具體步驟如下:
- 創(chuàng)建
Workbook類對象。 - 使用
Workbook.LoadFromFile()方法加載 Excel 文件。 - 通過
Workbook.Worksheets[index]屬性獲取指定工作表。 - 使用
Worksheet.PivotTables[index]屬性獲取指定的數(shù)據(jù)透視表。 - 調(diào)用
XlsPivotTable.ColumnFields[index].AddValueFilter()或XlsPivotTable.ColumnFields[index].AddLabelFilter()方法,為指定列字段添加值篩選或標(biāo)簽篩選。 - 使用
XlsPivotTable.CalculateData()方法重新計(jì)算數(shù)據(jù)透視表數(shù)據(jù)。 - 使用
Workbook.SaveToFile()方法保存結(jié)果文件。
完整示例代碼如下:
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
namespace AddColumnFilter
{
internal class Program
{
static void Main(string[] args)
{
// 創(chuàng)建 Workbook 類對象
Workbook workbook = new Workbook();
// 加載 Excel 文件
workbook.LoadFromFile("Sample.xlsx");
// 獲取第一個工作表
Worksheet sheet = workbook.Worksheets[0];
// 獲取第一個數(shù)據(jù)透視表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 為數(shù)據(jù)透視表中的第一個列字段添加標(biāo)簽篩選
pt.ColumnFields[0].AddLabelFilter(
PivotLabelFilterType.Equal,
"Laptop",
null);
// 或?yàn)閿?shù)據(jù)透視表中的第一個列字段添加值篩選
// pt.ColumnFields[0].AddValueFilter(
// PivotValueFilterType.Between,
// pt.DataFields[0],
// 5000,
// 10000);
// 重新計(jì)算數(shù)據(jù)透視表數(shù)據(jù)
pt.CalculateData();
// 保存結(jié)果文件
workbook.SaveToFile("AddColumnFilter.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}
}知識擴(kuò)展
在Excel數(shù)據(jù)透視表中,添加篩選器本質(zhì)上就是將數(shù)據(jù)源中的某個字段放入數(shù)據(jù)透視表的 報(bào)表篩選區(qū)域(Page Fields / Report Filter)。以下使用主流Excel操作庫的C#代碼示例。
1.使用 Spire.XLS(推薦,無需安裝Excel)
Spire.XLS是國內(nèi)團(tuán)隊(duì)開發(fā)的專業(yè)Excel處理庫,無需安裝Microsoft Office,API設(shè)計(jì)簡潔。
安裝
通過NuGet安裝:
Install-Package Spire.XLS
添加報(bào)表篩選器(Report Filter)
using Spire.Xls;
using Spire.Xls.Core.Spreadsheet.PivotTables;
class Program
{
static void Main(string[] args)
{
// 1. 創(chuàng)建Workbook對象并加載Excel文件
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
// 2. 獲取第一個工作表
Worksheet sheet = workbook.Worksheets[0];
// 3. 獲取第一個數(shù)據(jù)透視表
XlsPivotTable pt = sheet.PivotTables[0] as XlsPivotTable;
// 4. 創(chuàng)建報(bào)表篩選器(指定字段名和是否自動添加所有項(xiàng))
PivotReportFilter reportFilter = new PivotReportFilter("Product", true);
// 5. 添加篩選器到數(shù)據(jù)透視表
pt.ReportFilters.Add(reportFilter);
// 6. 保存文件
workbook.SaveToFile("AddReportFilter.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}上述代碼將數(shù)據(jù)源中的"Product"字段添加到數(shù)據(jù)透視表的篩選器區(qū)域。
為行字段添加值篩選或標(biāo)簽篩選
如果需要更精細(xì)的篩選(如"銷售額大于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的數(shù)據(jù)
pt.RowFields[0].AddValueFilter(
PivotFilterType.GreaterThan, // 篩選條件:大于
"Sum of Amount", // 值字段名稱
10000 // 閾值
);
// 重新計(jì)算數(shù)據(jù)
pt.CalculateData();
workbook.SaveToFile("AddValueFilter.xlsx", FileFormat.Version2016);
workbook.Dispose();
}
}也可以添加標(biāo)簽篩選(如"產(chǎn)品名稱包含'A'"):
// 為行字段添加標(biāo)簽篩選:篩選出產(chǎn)品名稱包含"P"的數(shù)據(jù) pt.RowFields[0].AddLabelFilter(PivotFilterType.Contains, "P");
2.使用 Microsoft.Office.Interop.Excel(需要安裝Excel)
這是最傳統(tǒng)的方式,需要系統(tǒng)安裝Microsoft Office Excel,適合Windows平臺。
安裝
在項(xiàng)目中添加COM引用:右鍵項(xiàng)目 → 添加引用 → COM → 選擇 Microsoft Excel XX.X Object Library。
添加報(bào)表篩選器示例
using Excel = Microsoft.Office.Interop.Excel;
class Program
{
static void Main(string[] args)
{
// 1. 創(chuàng)建Excel應(yīng)用程序?qū)ο?
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = false;
// 2. 打開工作簿
Excel.Workbook workbook = excelApp.Workbooks.Open(@"C:\Sample.xlsx");
// 3. 獲取工作表和數(shù)據(jù)透視表
Excel.Worksheet worksheet = workbook.Sheets["Sheet1"];
Excel.PivotTable pivotTable = worksheet.PivotTables("PivotTable1");
// 4. 獲取要作為篩選器的字段并設(shè)置其方向?yàn)閳?bào)表篩選區(qū)域(Page Field)
Excel.PivotField filterField = pivotTable.PivotFields("Product");
filterField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;
filterField.Position = 1;
// 5. 可選:允許多選
filterField.EnableMultiplePageItems = true;
// 6. 設(shè)置篩選值(例如只顯示"TV")
filterField.ClearAllFilters();
filterField.CurrentPage = "TV";
// 7. 刷新數(shù)據(jù)透視表
pivotTable.RefreshTable();
// 8. 保存并退出
workbook.Save();
workbook.Close();
excelApp.Quit();
}
}關(guān)鍵點(diǎn)說明:
Orientation = xlPageField:將字段放置到報(bào)表篩選區(qū)域CurrentPage:設(shè)置當(dāng)前選中的篩選值EnableMultiplePageItems = true:允許多選(默認(rèn)為單選)
3.使用 Aspose.Cells(功能強(qiáng)大,無需安裝Excel)
Aspose.Cells是成熟的商業(yè)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. 獲取數(shù)據(jù)透視表
PivotTable pivotTable = workbook.Worksheets[0].PivotTables[0];
// 3. 添加頁面字段(篩選器)
pivotTable.AddFieldToArea(PivotFieldType.Page, pivotTable.Fields["Product"]);
// 4. 可選:設(shè)置當(dāng)前篩選選項(xiàng)
PivotField pageField = pivotTable.PageFields[0];
pageField.ClearAllFilters();
// 要篩選的值
pageField.AddPageItem("TV");
// 5. 刷新數(shù)據(jù)并保存
pivotTable.RefreshData();
pivotTable.CalculateData();
workbook.Save("Output.xlsx");
}
}按索引和名稱顯示報(bào)表篩選頁面
Aspose.Cells還提供了ShowReportFilterPage系列方法,可以將報(bào)表篩選器的每一項(xiàng)輸出為獨(dú)立工作表:
// 根據(jù)字段顯示報(bào)表篩選頁面 pivotTable.ShowReportFilterPage(pivotTable.PageFields[0]); // 根據(jù)索引顯示 pivotTable.ShowReportFilterPageByIndex(pivotTable.PageFields[0].Position); // 根據(jù)名稱顯示 pivotTable.ShowReportFilterPageByName(pivotTable.PageFields[0].Name);
4.使用 EPPlus(開源免費(fèi),需注意版本限制)
EPPlus是開源免費(fèi)庫(5.x及以下版本),但添加報(bào)表篩選器的功能支持有限。
安裝
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"];
// 添加為報(bào)表篩選區(qū)域
pivotTable.PageFields.Add(pivotField);
// 保存文件
package.Save();
}
}
}局限性提醒:有開發(fā)者反饋EPPlus對PageFields功能支持不夠完善,上述代碼可能需要根據(jù)實(shí)際版本調(diào)整。如果需要可靠的篩選器功能,建議使用Spire.XLS或Aspose.Cells。
各方案對比
| 方案 | 是否需要安裝Excel | 收費(fèi)情況 | 優(yōu)點(diǎn) | 適合場景 |
|---|---|---|---|---|
| Spire.XLS | ? | 商業(yè)(有免費(fèi)版) | API簡潔,功能完整,無需安裝Office | 絕大多數(shù)場景,推薦 |
| Interop | ? | 免費(fèi)(需要Excel授權(quán)) | 原生控制,支持所有Excel功能 | Windows環(huán)境且已安裝Excel的項(xiàng)目 |
| Aspose.Cells | ? | 商業(yè) | 功能最強(qiáng)大,企業(yè)級支持 | 大規(guī)模/復(fù)雜報(bào)表處理需求 |
| EPPlus | ? | 開源免費(fèi)(5.x) | 免費(fèi)開源,輕量 | 簡單場景,可接受功能限制 |
總結(jié)
通過為 Excel 數(shù)據(jù)透視表添加報(bào)表篩選器、行字段篩選器以及列字段篩選器,可以更加靈活地控制和分析數(shù)據(jù)內(nèi)容。本文演示了如何在 C# 中使用相關(guān) API 為數(shù)據(jù)透視表設(shè)置不同類型的篩選條件,包括值篩選和標(biāo)簽篩選,并介紹了重新計(jì)算數(shù)據(jù)透視表及保存結(jié)果文件的方法。借助這些功能,開發(fā)者可以更高效地實(shí)現(xiàn) Excel 數(shù)據(jù)的自動化篩選與分析,提升數(shù)據(jù)處理效率和報(bào)表的可讀性。
到此這篇關(guān)于C#代碼實(shí)現(xiàn)在Excel中為數(shù)據(jù)透視表添加篩選器的文章就介紹到這了,更多相關(guān)C# Excel添加篩選器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WPF實(shí)現(xiàn)動態(tài)加載圖片瀏覽器
這篇文章主要為大家詳細(xì)介紹了一種?WPF?+?Prism?實(shí)現(xiàn)動態(tài)分頁加載圖片的方法,其中結(jié)合了ScrollViewer滾動條觸底檢測,實(shí)現(xiàn)邊滾動邊加載的流暢體驗(yàn),下面就跟隨小編一起學(xué)習(xí)一下吧2025-04-04
C#動態(tài)生成實(shí)體類的5種方法詳解與實(shí)戰(zhàn)演示
這篇文章主要為大家詳細(xì)介紹了C#中動態(tài)生成實(shí)體類的5種實(shí)用方法,涵蓋T4模板,CodeDOM,Roslyn,反射和Emit等技術(shù),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
C#使用Spire.Doc for .NET實(shí)現(xiàn)自動化生成Word目錄
在企業(yè)報(bào)告或長篇技術(shù)文檔中,手動創(chuàng)建Word TOC 自動化目錄往往耗時費(fèi)力,下面我們就來看看C#如何使用Spire.Doc for .NET解決這一問題吧2026-02-02
C#實(shí)現(xiàn)斐波那契數(shù)列的幾種方法整理
這篇文章主要介紹了C#實(shí)現(xiàn)斐波那契數(shù)列的幾種方法整理,主要介紹了遞歸,循環(huán),公式和矩陣法等,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09
C#控制Excel Sheet使其自適應(yīng)頁寬與列寬的方法
這篇文章主要介紹了C#控制Excel Sheet使其自適應(yīng)頁寬與列寬的方法,涉及C#操作Excel的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-06-06

