C# 在数据透视字段上应用数字格式

C# 在数据透视字段上应用数字格式,c#,excel,vsto,C#,Excel,Vsto,我可以使用Microsoft.Office.Interop.Excel.PivotFields属性对数据透视字段应用NumberFormat。但这不会对求和字段应用相同的格式。数据透视表中求和字段是否有我缺少的单独属性 Microsoft.Office.Interop.Excel.PivotFields pFields = pivotTable.PivotFields(); foreach (Microsoft.Office.Interop.Excel.PivotField pf

我可以使用Microsoft.Office.Interop.Excel.PivotFields属性对数据透视字段应用NumberFormat。但这不会对求和字段应用相同的格式。数据透视表中求和字段是否有我缺少的单独属性

Microsoft.Office.Interop.Excel.PivotFields pFields = pivotTable.PivotFields();
        foreach (Microsoft.Office.Interop.Excel.PivotField pf in pFields)
            if (pf.DataType == XlPivotFieldDataType.xlNumber)
                pf.NumberFormat = "#,##0.00";

关于这些成员的文档并不十分清晰,但经过一番深入研究和反复尝试后,您想要的属性似乎是
数据透视表。VisibleFields
,您需要将其转换为
数据透视字段
对象以进行迭代:

Excel.PivotFields vFields = (Excel.PivotFields)pivotTable.VisibleFields;
这将为您提供表中所有可见的字段(与
数据透视表.PivotFields()
相反,后者似乎只为您提供行标签列和基础源数据)。在设置数字格式之前,您可能必须检查每个数字的值,否则我相信它将应用于表中的所有内容,这可能不是您想要的:

foreach (Excel.PivotField pf in vFields)
{
    if (pf.DataType == Excel.XlPivotFieldDataType.xlNumber
        & pf.Value == "Sum of Price")
    {
        pf.NumberFormat = "#,##0.00";
    }
}
如果您特别想访问一个单元格,则可以访问
数据透视字段。数据透视项
,并迭代每个
数据透视字段
对象的数据透视项:

    Excel.PivotItems pi = (Excel.PivotItems)pf.PivotItems();

但是我认为
数据透视项的大多数属性都是只读的。

有什么原因不能在创建数据透视表的exel表/列/行上设置数字格式?