我有一个带有数据透视表的预制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
答案 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;
}
}
}