如何覆盖数据透视表(Aspose Cells)上的列标签文本?

时间:2016-11-23 21:02:50

标签: excel pivot-table aspose aspose-cells

我正在使用包含诸如“10/1/2015”,“2015年11月1日”等值的源数据。

可以理解的是,当我将这些值添加为Column PivotFieldType:

pivotTable.AddFieldToArea(PivotFieldType.Column, MONTHYR_COLUMN);
pivotTable.ColumnHeaderCaption = "Months";

...列中的值对应于从原始数据中提取的值(“10/1/2015”,“2015年11月1日”等):

enter image description here

然而,我不希望文字表示(“10/1/2015”,“2015年1月11日”等),我希望标签为“10月15日”,“11月15日”等。

我该如何实现?

在将数据写入数据表之前(从“2015年10月1日”到“10月15日”等),我是否需要更改数据?或者我是否可以中断列标签写入过程在数据透视表上?

更新

似乎答案链接提供的代码应该有效;我可以遍历它,值是正确的,但没有任何变化。这是我的代码:

// Get "10/1/2015" to display as "Oct 15"
Style columnStyle = new CellsFactory().CreateStyle();
columnStyle.Custom = "mmm yy";
CellArea columnRange = pivotTable.ColumnRange;
for (int c = columnRange.StartColumn; c < columnRange.EndColumn; c++)
{
    pivotTable.Format(columnRange.StartRow + 1, c, columnStyle);
}

更新2

即使这样做也没有 - C7的价值仍然是“10/1/2015”

Cell cell = pivotTableSheet.Cells["C7"];
cell.PutValue("Oct 15");

1 个答案:

答案 0 :(得分:0)

我通过更改生成数据透视表的源数据解决了这个问题,如下所示:

private void AddPivotData(String ItemCode, String ItemDescription, String Unit, String MonthYear, int Quantity, Decimal TotalPrice, Boolean IsContractItem, Double PercentageOfTotal, Double MonthlyPercentage)
{
    . . .
    cell = sourceDataSheet.Cells[_lastRowAddedPivotTableData, 3];
    cell.PutValue(ConvertToMMMYY(MonthYear));
    . . .
}

// Comes in formatted YYYYMM (such as "201510"), returned as MMM YY (such as "Oct 15")
private object ConvertToMMMYY(string MonthYear)
{
    string yearPortion = MonthYear.Substring(0, 4);
    string monthPortion = MonthYear.Substring(4, 2);
    string yearSansCentury = yearPortion.Substring(2, 2);
    string monthNumAsStr = GetMonthAsMMM(monthPortion);
    return string.Format("{0}{1}", monthNumAsStr, yearSansCentury);
}

private string GetMonthAsMMM(string monthPortion)
{
    if (monthPortion == "01") return "Jan";
    if (monthPortion == "02") return "Feb";
    if (monthPortion == "03") return "Mar";
    if (monthPortion == "04") return "Apr";
    if (monthPortion == "05") return "May";
    if (monthPortion == "06") return "Jun";
    if (monthPortion == "07") return "Jul";
    if (monthPortion == "08") return "Aug";
    if (monthPortion == "09") return "Sep";
    if (monthPortion == "10") return "Oct";
    if (monthPortion == "11") return "Nov";
    if (monthPortion == "12") return "Dec";
    return "Unrecognized Month Num";
}