cloudy
1
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