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

标签 c# excel pivot-table collapse

我有一个带有数据透视表的预制 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;
但它不起作用。有任何想法吗?

最佳答案

好吧,以某种方式管理以仅折叠每个字段中的第一个项目(这样循环不会一直持续到最后,并且由于 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 数据透视表中的折叠字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31473503/

相关文章:

c# - 在文本框中显示计数

excel - 显示垂直对齐的溢出文本

html - 尝试检查 DispStaticNodeList 时 Excel 崩溃

python - 如何在 pandas 数据透视表中重复索引,以便 nan 填充无记录行?

c# - 如何在 Azure 中执行区分大小写的 LINQ 查询?

c# - 我的单例实现是否正确? C#

c# - asp.net 中的异步方法导致请求永远无法完成

excel - 此代码的第一个 if 语句中的 else 部分在哪里

mysql - MySQL 数据透视表中的分组依据

python - 在数据透视表 pandas 中用 0 填充列