繁体   English   中英

使用vsto c#跟踪Excel中的数据透视表过滤器

[英]Tracking pivot table Filters in Excel using vsto c#

任何人都可以建议如何获取在Excel数据透视表上应用的筛选器的详细信息。 同样从当前工作表的一组数据透视表中,如何识别那些在其中应用了过滤器的数据透视表。 提前致谢..

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

跟踪数据透视表筛选器异常困难。 即使只是确定哪个PivotField发生了更改也是具有挑战性的,因为更改时唯一会生成的事件是PivotTable_Refresh事件,该事件甚至无法告诉您刚刚更改了哪个特定字段。 实际上,该事件也会因其他大量与过滤无关的事情而生成,如我在http://dailydoseofexcel.com/archives/2014/07/08/what-c​​aused-that-pivottableupdate中的帖子所述-part-two /,因此,如果您尝试使用该事件来执行与过滤器相关的操作,则您的代码会不必要地大量运行,除非您检查UNDO堆栈并仅在堆栈显示“ Filter”时才运行它。 我在http://dailydoseofexcel.com/archives/2014/07/10/what-c​​aused-that-pivottableupdate-episode-iv/上列出了很长的代码,该代码使用多种方法来标识刚刚更改的PivotField。

跟踪筛选器的最简单方法是为每个数据透视表创建一堆副本(每个字段一个副本),每个副本不包含任何内容,但该字段作为RowField。 然后通过切片器将那些“从属”数据透视表连接到主服务器,以便对主服务器中的筛选器进行的任何更改都将反映在从属服务器上。 这将显示每个字段的可见项目(即未过滤掉哪些项目)。 然后,您可以监视这些从数据透视表的更改。 丑陋,但是行得通。

您是否尝试过Excel.PivotTable.ActiveFilters

您可以像这样在某个工作表上迭代数据透视表:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM