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

时间:2015-07-17 10:15:12

标签: c# excel pivot-table collapse

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

在数据透视表中有3个Row字段,在填充之后,Pivot通过代码刷新,在打开Excel后扩展了所有扩展的行。

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

我得到了它的工作,但它花了太多时间,因为它在每个项目中使用ShowDetails,还有其他方法,并快速折叠字段? (打开excel并手动执行而不是选项:P)。

我的代码(字段崩溃了):

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;

但它不起作用..:\任何想法?

TIA

1 个答案:

答案 0 :(得分:0)

好吧,从某种程度上管理到只折叠每个字段中的第一个项目(这样循环不会一直持续到最后,并且因为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;

                        }
                    }
                }