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

时间:2016-10-13 22:09:29

标签: c# excel pivot-table excel-interop

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

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

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

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

...但是当生成数据透视表时,它会显示"行标签"在哪里我想说'"描述"和#34;列标签"我希望它在哪里说"月":

enter image description here

如何将此默认/普通香草措辞改为我的自定义标签文字?

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

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);

我和#34; YYYYMM"有同样的问题。列标题标签,例如" 201509"和" 201510&#34 ;;我希望这些是" 2015年9月"和" 2015年10月" (等等。)。确实,这是源数据中包含的字面值(" 201509"" 201510"等等),但我想知道是否有&#39这是一种在没有太多麻烦的情况下按摩这些值的方法。

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

1 个答案:

答案 0 :(得分:2)

我可能会离开我的摇杆,但实现此目的的一种方法是简单地覆盖这些单元格中的值。即使修改数据透视表,它们也应该坚持下去。

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

我认为更合适的方法是更改​​“Compact Layout”标题属性:

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

就您的月份标题而言,如果您对它们不是实际日期并且只是呈现为文本,那么您始终可以将实际源数据的NumberFormat属性设置为"@",这是文本。

- 编辑 -

如果源数据是实际日期 - 日期,则有两个选项。最好的选择是将它保留为日期,这样排序等方式将按预期方式工作(否则“8月15日”似乎在“7月15日”之前)。这样做的方法是更改​​NumberFormat的{​​{1}}:

PivotField

另有所谓:

monthField.NumberFormat = "mmm yyyy";

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

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

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