【问题标题】:How can I override the column label text on a Pivot Table (Aspose Cells)?如何覆盖数据透视表(Aspose Cells)上的列标签文本?
【发布时间】:2016-12-03 20:53:25
【问题描述】:

我正在使用包含“10/1/2015”、“11/1/2015”等值的源数据。

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

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

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

但是,我希望标签为“Oct 15”、“Nov 15”等,而不是文本表示(“10/1/2015”、“11/1/2015”等)。

我怎样才能做到这一点?

在将数据写入数据表之前我是否必须更改数据(从“10/1/2015”到“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");

【问题讨论】:

    标签: excel pivot-table aspose aspose-cells


    【解决方案1】:

    您可以将 GetMonthAsMMM 函数替换为 WorksheetFunction.TEXT(monthPortion &amp; "/01/" &amp; yearPortion , "mmm") 等公式

    【讨论】:

      【解决方案2】:

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

      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";
      }
      

      【讨论】:

      • 如果有人想回答这个问题(即使只是以我的回答为基础),我愿意奖励赏金而不是让它消失在赏金荒地的迷宫深处(联合国会员资格待定) )。
      • 你不能用 WorksheetFunction.TEXT(monthPortion & "/01/" & yearPortion , "mmm") 之类的公式替换 GetMonthAsMMM 函数
      • 也许可以,但上面已经修复了,所以我现在不打算重新讨论它。我还有其他事情要做。
      • @nightcrawler23:尽管如此,请给出答案,我会给你赏金 - 有人也可以拥有它!它即将到期...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多