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

brc7rcf0  于 2022-12-01  发布在  C#
关注(0)|答案(1)|浏览(226)

我有一个预先制作的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;

但它不工作。有什么想法?

bejyjqdl

bejyjqdl1#

好吧,设法只折叠每个字段中的第一项(这样循环不会一直进行到最后,而且由于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;

                        }
                    }
                }

相关问题