如何更改这些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日”之前)。 你这样做的方式是改变你的PivotField
的NumberFormat
:
monthField.NumberFormat = "mmm yyyy";
否则称为:
pvt.PivotFields("MonthYr").NumberFormat = "mmm yyyy";
这应该按照您描述的方式格式化每个标题。
另一种方法是将date显示为新列(来自源数据)的文本,但是如果上述方法满足您的需求,听起来就不太理想。 我能看到这样做的唯一原因是,如果你真的不希望它作为背后的date,无论出于何种原因。 新列的公式将会是这样的:
=Text("<source cell>", "mmm yyyy")