c# Excel 数据透视表中的折叠字段

Posted

技术标签:

【中文标题】c# Excel 数据透视表中的折叠字段【英文标题】:c# Collapse Fields in Excel PivotTable 【发布时间】:2015-10-07 00:54:33 【问题描述】:

我有一个带有数据透视表的预制 Excel,它从另一个工作表中获取数据,我通过 c# 代码填充。

在数据透视表中有三个行字段,在填充并通过代码刷新数据透视表后,打开 Excel 后使所有行展开。

我已经尝试过使用DrilledDown 方法(在字段中,但出现错误),ShowDetails 仅适用于项目(在字段内)。

我让它工作了,但是它花费了太多时间,因为它在每个项目中都使用了ShowDetails,还有其他方法可以快速折叠字段吗? (打开 Excel 并手动操作不是一种选择)。

我的代码(折叠字段是):

listItems.Add("Data");
listItems.Add("Months");
listItems.Add("Grocery");
    
Microsoft.Office.Interop.Excel.PivotFields pfs = (Microsoft.Office.Interop.Excel.PivotFields)pivot.PivotFields();
    
foreach (String s in listItems)

    Microsoft.Office.Interop.Excel.PivotField pf = (Microsoft.Office.Interop.Excel.PivotField)pivot.PivotFields(s);
                    
    foreach (Microsoft.Office.Interop.Excel.PivotItem item in (Microsoft.Office.Interop.Excel.PivotItems)pf.PivotItems())
    
        if (item.Value == "(blank)")
            item.Visible = false;

        item.ShowDetail = false;
      


问题是,也许有一种简单快捷的方法?我正在尝试类似的东西

pf.DrilledDown = False;

pf.ShowDetail = False;

但它不起作用。有什么想法吗?

【问题讨论】:

【参考方案1】:

好吧,以某种方式管理以仅折叠每个字段中的第一个项目(这样循环不会持续到最后,并且由于 Excel 会自动折叠其他类似项目(当您折叠一个相同类型的字段时) ,它有效)。

PS:由于杂货店的第一个字段始终是“_blank”字段,我肯定在“_blank”字段之后总有一些东西,但我不能只将折叠应用于“_blank”,因为那样的话不适用于其他项目(我想它必须是里面有值的东西)。

所以...得到了这个(它要快得多,但我认为它应该以另一种方式存在(在 c# 中使用更简单的代码(在 Excel 中不使用 VB 宏)),但如果有,那就很难了发现 - 很少有人以编程方式操作数据透视表。

                listItems.Add("Date");
                listItems.Add("Months");
                listItems.Add("Groceries");

                Microsoft.Office.Interop.Excel.PivotFields pfs = (Microsoft.Office.Interop.Excel.PivotFields)pivot.PivotFields();

                foreach (String s in listItems)
                
                    Microsoft.Office.Interop.Excel.PivotField pf = (Microsoft.Office.Interop.Excel.PivotField)pivot.PivotFields(s);



                    foreach (Microsoft.Office.Interop.Excel.PivotItem item in (Microsoft.Office.Interop.Excel.PivotItems)pf.PivotItems())
                    
                        if (pf.Value == "Date")
                        
                            item.ShowDetail = false;
                            break;
                        
                        if (pf.Value == "Months")
                        
                            item.ShowDetail = false;
                            break;
                        
                        if (pf.Value == "Groceries")
                        

                            if (item.Value == "(blank)")
                            
                                item.Visible = false;
                                continue;
                            
                            item.ShowDetail = false;
                            break;

                        
                    
                

【讨论】:

以上是关于c# Excel 数据透视表中的折叠字段的主要内容,如果未能解决你的问题,请参考以下文章

Excel中基于文本字段的数据透视表中的条件格式

使用 Excel 中的数据模型创建数据透视表?

Excel的数据透视表中,如何过滤value中的0值?

如何使用或过滤器从 Excel 中的 OLAP 多维数据集数据透视表中获取数据

如何使用 vba 从具有多个数据字段的 excel 数据透视表中删除小计

excel如何将数据透视表中的汇总项去掉?