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

How can I change the text of the automatically added labels on these Excel Interop PivotTables' row and column fields?

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

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

...以及一个允许用户过滤列的列字段:

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

...但是当生成数据透视表时,它会在我希望显示 "Description" 的位置显示 "Row Labels" 并在我希望显示 "Month" 的位置显示 "Column Labels" :

如何将这个 default/plain 原版的措辞更改为我的自定义标签文本?

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

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" 列 header 标签有同样的问题,例如“201509”和“201510”;我希望这些改为 "Sep 2015" 和 "Oct 2015" (等等)。的确,这是源数据中包含的文字值(“201509”和“201510”等),但我想知道是否有一种方法可以轻松地在此处修改这些值。

必须有办法为这些标签指定一个值,或者至少不显示它们,但是控制这些的是哪个 属性 哪个 object?

我可能已经疯了,但一种方法是简单地覆盖这些单元格中的值。他们应该坚持,即使你修改枢轴 table.

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

我认为更合适的方法是更改​​ "Compact Layout" header 属性:

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

就你的月份 header 而言,如果你同意它们不是实际日期而只是呈现为文本,你可以随时设置 NumberFormat 属性实际源数据为 "@",即文本。

-- 编辑--

如果源数据是真实的 Date-Dates,您有两个选择。最好的选择是将其保留为日期,这样排序等将按您期望的方式工作(否则 "Aug 15" 似乎在 "Jul 15" 之前)。您这样做的方法是更改​​ PivotField:

NumberFormat
monthField.NumberFormat = "mmm yyyy";

也称为:

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

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

另一种方法是将您的日期呈现为新列中的文本(来自您的源数据),但如果上述方法满足您的需要,这听起来不太理想。我能看到这样做的唯一原因是,无论出于何种原因,你真的不想把它作为幕后约会。新列的公式类似于:

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