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;
但是它不起作用。什么好主意吗?
那么,从某种程度上管理到只折叠每个字段中的第一个项目(这样循环直到最后才结束,并且由于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;
}
}
}