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

本文关键字:折叠 字段 透视 Excel 数据 | 更新日期: 2023-09-27 18:03:07

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

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

我已经尝试使用DrilledDown方法(在字段中,但我得到一个错误),ShowDetails只在项目中工作(在字段内)。

我得到了它的工作,但它需要太多的时间,因为它在每个项目中使用ShowDetails,有没有其他方法,并快速折叠字段?(打开Excel并手动操作是不可取的)。

My Code(折叠字段是):

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;

但是它不起作用。什么好主意吗?

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

那么,从某种程度上管理到只折叠每个字段中的第一个项目(这样循环直到最后才结束,并且由于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;
                        }
                    }
                }