如何更改这些Excel Interop数据透视表的行和列字段上自动添加的标签的文本?

我有一个允许用户过滤行的行字段:

pvt.PivotFields("Description").Orientation = XlPivotFieldOrientation.xlRowField; 

…以及允许用户过滤列的列字段:

 var monthField = pvt.PivotFields("MonthYr"); monthField.Orientation = XlPivotFieldOrientation.xlColumnField; 

…但生成数据透视表时,它显示“行标签”,我希望它说“说明”和“列标签”,我想要它说“月”:

在这里输入图像说明

我怎样才能将这个默认/简单的香草语言更改为我的自定义标签文本?

更多的上下文,显示更多的代码:

 PivotTable pvt = pc.CreatePivotTable(_xlPivotTableSheet.Range["A6"], "PivotTable"); pvt.MergeLabels = true; // The only thing I noticed this doing was centering the heading labels pvt.PivotFields("Description").Orientation = XlPivotFieldOrientation.xlRowField; var monthField = pvt.PivotFields("MonthYr"); monthField.Orientation = XlPivotFieldOrientation.xlColumnField; monthField.DataRange.Interior.Color = ColorTranslator.ToOle(Color.LightBlue); 

我有与“YYYYMM”列标题相同的问题,如“201509”和“201510”; 我希望这些是“2015年9月”和“2015年10月”(等)。 确实,这是源数据(“201509”和“201510”等)中包含的字面值,但是我想知道是否有办法在这里按摩这些值而没有太多麻烦。

必须有一种方法来为这些标签指定一个值,或者至less不显示它们,但是控制这些标签的是哪个对象的属性?

我可以离开我的摇杆,但有一种方法是简单地覆盖这些单元格中的值。 即使在修改数据透视表时,他们也应该坚持下去。

 _xlPivotTableSheet.Range["A7"].Value2 = "Description"; _xlPivotTableSheet.Range["B6"].Value2 = "Months"; 

我认为更正确的方法是更改​​“精简版面”标题属性:

 pvt.CompactLayoutColumnHeader = "Months"; pvt.CompactLayoutRowHeader = "Description"; 

至于你的月份标题,如果你没有他们没有实际的date,只是作为文本呈现,你可以随时设置实际源数据的NumberFormat属性为"@" ,这是文本。

– 编辑 –

如果源数据是实际的datedate,则有两个选项。 最好的办法是把它保存为一个date,这样的sorting方式将按照你期望的方式工作(否则“8月15日”似乎在“7月15日”之前)。 你这样做的方式是改变你的PivotFieldNumberFormat

 monthField.NumberFormat = "mmm yyyy"; 

否则称为:

 pvt.PivotFields("MonthYr").NumberFormat = "mmm yyyy"; 

这应该按照您描述的方式格式化每个标题。

另一种方法是将date显示为新列(来自源数据)的文本,但是如果上述方法满足您的需求,听起来就不太理想。 我能看到这样做的唯一原因是,如果你真的不希望它作为背后的date,无论出于何种原因。 新列的公式将会是这样的:

 =Text("<source cell>", "mmm yyyy")