给模板文件中的数据透视表pivot加筛选器fitler出现问题

SyntaxEditor Code Snippet

var wb=new Workbook(@“F:\mao\2items\7.1\05报表模块\warehouse\alarm_3.xlsx”);
var pivot=wb.Worksheets[0].PivotTables[0];

var rowField=pivot.RowFields[“device_name”];
rowField.GetFilters().Count().Dump();//1

pivot.RefreshData();
pivot.CalculateData();
rowField.GetFilters().Count().Dump();//2

rowField.FilterByValue(13,PivotFilterType.ValueGreaterThan,2,0);
rowField.GetFilters().Count().Dump();//3

在这段代码的1处,得到的结果是1;2和3处,结果是0。
模板文件如附件
alarm_3.7z (18.2 KB)

@cloudy

在您的代码中,您在处理数据透视表的筛选器时遇到了问题。根据您提供的代码,您在第1处得到了1个筛选器,但在第2和第3处得到了0个筛选器。这可能是因为在调用 pivot.RefreshData()pivot.CalculateData() 后,数据透视表的状态发生了变化,导致之前的筛选器被清除。

请确保在调用 RefreshData()CalculateData() 之前,您已经正确设置了筛选器。您可以尝试在这两个方法调用之后重新设置筛选器,或者检查数据透视表的数据源是否在这两个方法调用后发生了变化。

以下是一个可能的解决方案示例:

var wb = new Workbook(@"F:\mao\2items\7.1\05报表模块\warehouse\alarm_3.xlsx");
var pivot = wb.Worksheets[0].PivotTables[0];

var rowField = pivot.RowFields["device_name"];
rowField.GetFilters().Count().Dump(); // 1

pivot.RefreshData();
pivot.CalculateData();
rowField.GetFilters().Count().Dump(); // 2

// 重新设置筛选器
rowField.FilterByValue(13, PivotFilterType.ValueGreaterThan, 2, 0);
rowField.GetFilters().Count().Dump(); // 3

如果问题仍然存在,请检查数据透视表的源数据是否在刷新后仍然有效,或者考虑在相关论坛上寻求更多帮助。

@cloudy
由于Values区域只有一个PivotField,所以FilterByValue方法的第一个参数只能是0,否则添加过滤就会失败。请参考以下样例代码添加过滤器。

Workbook wb = new Workbook(filePath + @"alarm_3.xlsx");
PivotTable pivot = wb.Worksheets[0].PivotTables[0];

PivotField rowField = pivot.RowFields["device_name"];
Console.WriteLine(rowField.GetFilters().Count());//1

pivot.RefreshData();
pivot.CalculateData();
Console.WriteLine(rowField.GetFilters().Count());//2

rowField.FilterByValue(0, PivotFilterType.ValueGreaterThan, 2, 0);
Console.WriteLine(rowField.GetFilters().Count());//3

@cloudy
通过使用以下样例代码在最新版本v25.10上进行测试。我们发现在刷新和计算透视表后,过滤器出现了丢失的情况。

Workbook wb = new Workbook(filePath + @"alarm_3.xlsx");
PivotTable pivot = wb.Worksheets[0].PivotTables[0];

PivotField rowField = pivot.RowFields["device_name"];
Console.WriteLine(rowField.GetFilters().Count());//1
            
pivot.RefreshData();
pivot.CalculateData();
Console.WriteLine(rowField.GetFilters().Count());//2
//添加过滤器
rowField.FilterByValue(0, PivotFilterType.ValueGreaterThan, 2, 0);
Console.WriteLine(rowField.GetFilters().Count());//3

输出结果:

1
0
1

我们已经在内部问题跟踪系统中打开了以下新问题单,并将根据Free Support Policies中提到的条款提供修复。

问题单号:CELLSNET-59183