如何从C#中的数据透视表对象获取Visible PivotField对象(Microsoft.Office.Interop.Excel)

时间:2017-12-23 22:24:18

标签: c# excel

 PivotTables pt = worksheet.PivotTables();
 var pivot = pt.Item(1);
 Microsoft.Office.Interop.Excel.PivotFields pf= 
(Microsoft.Office.Interop.Excel.PivotFields)pivot.VisibleFields();

上面的代码段应该返回数据透视表中可见字段的集合,但是 MissingMemberException (调用[PROPERTYGET,DISPID(0)]时错误。 )生成,但以下代码完美地运行:

  Microsoft.Office.Interop.Excel.PivotFields pf= 
  (Microsoft.Office.Interop.Excel.PivotFields)pivot.PivotFields();

我只想要表格中的可见字段而不是所有字段。

1 个答案:

答案 0 :(得分:0)

将VBA转换为C#时遇到的最大挑战之一就是VBA在需要括号的功能与不需要括号的功能之间模糊了界限。

因此,当函数没有参数且不需要括号时,它看起来更像是属性。 PivotFields就是这种情况。

所有这一切,C#中的PivotFields()确实是方法,因此上面的语法是正确的。但是,VisibleFields属性,而不是方法,因此您需要省略括号才能使其正常工作:

Excel.PivotTables pt = worksheet.PivotTables();
var pivot = pt.Item(1);

Microsoft.Office.Interop.Excel.PivotFields vf = pivot.VisibleFields;
                                       // not   pivot.VisibleFields();
foreach (Microsoft.Office.Interop.Excel.PivotField f in vf)
{
    // Do something
}

疯了,对吧?