如何更改这些 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")
我有一个允许用户过滤行的行字段:
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")