跟踪数据透视表使用vsto c在Excel中过滤

时间:2016-01-13 14:53:28

标签: c# excel vsto pivot-table

是否有人建议如何获取应用于Excel数据透视表的过滤器的详细信息。同样来自当前工作表的一组数据透视表,如何识别应用了过滤器的数据透视表。 在此先感谢..

2 个答案:

答案 0 :(得分:0)

我只能评论如何使用VBA执行此操作,这可能对您有所帮助作为起点。

跟踪数据透视表过滤器非常困难。即使只是弄清楚哪个PivotField发生了变化也是一项挑战,因为当他们改变时唯一的事件是PivotTable_Refresh事件,它甚至不会告诉你哪个特定字段刚刚改变。事实上,这个事件也是为了一大堆其他与过滤无关的事件生成的,正如我在http://dailydoseofexcel.com/archives/2014/07/08/what-caused-that-pivottableupdate-part-two/的帖子所述,所以如果你尝试使用该事件做一些与过滤器相关的事情,那么你的代码就会运行不必要地在很多时候,除非你检查UNDO堆栈并且只在堆栈说“过滤器”时运行它。我在http://dailydoseofexcel.com/archives/2014/07/10/what-caused-that-pivottableupdate-episode-iv/有一个非常长的代码列表,它使用了许多方法来识别哪些PivotField刚刚更改。

关于跟踪过滤器的最简单方法是创建每个数据透视表的一大堆副本 - 每个字段一个 - 每个都只包含该字段作为RowField。然后连接那些'奴隶'通过切片器将数据透视表转换为主设备,因此主设备中对过滤器的任何更改都会反映在从设备中。这将显示每个字段的可见项目(即未过滤掉哪些项目)。然后,您可以监视这些从属数据透视表以进行更改。丑陋,但它确实有效。

答案 1 :(得分:0)

您是否尝试过Excel.PivotTable.ActiveFilters

您可以在某个工作表上迭代数据透视表,如下所示:

Excel.PivotTables pivotTables = worksheet.PivotTables(Type.Missing);

foreach (Excel.PivotTable p in pivotTables){
    if(p.ActiveFilters.Count > 1){
         //your code
    }
}