如何提供基于Aspose.Cells数据透视表中其他两个值的计算值?

时间:2016-11-17 17:50:30

标签: excel pivot-table calculated-columns calculated-field aspose-cells

我正在将数据字段添加到数据透视表中,如下所示:

int TOTALQTY_COLUMN = 4;
int TOTALPRICE_COLUMN = 5;
. . .
pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALQTY_COLUMN);
pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALPRICE_COLUMN);

或者,提供更多背景信息:

Aspose.Cells.Pivot.PivotTableCollection pivotTables = pivotTableSheet.PivotTables;
int colcount = COLUMNS_IN_DATA_SHEET; 
string lastColAsStr = ReportRunnerConstsAndUtils.GetExcelColumnName(colcount);
int rowcount = sourceDataSheet.Cells.Rows.Count;
string sourceDataArg = string.Format("sourceDataSheet!A1:{0}{1}", lastColAsStr, rowcount);
int index = pivotTableSheet.PivotTables.Add(sourceDataArg, "A7", "PivotTableSheet");
Aspose.Cells.Pivot.PivotTable pivotTable = pivotTables[index];

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Row, DESCRIPTION_COLUMN);

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Column, MONTHYR_COLUMN);

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALQTY_COLUMN);
pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, TOTALPRICE_COLUMN);

我需要另一个数据字段,该字段基于提供给这两个数据字段的值(来自源数据的TOTALQTY_COLUMN和TOTALPRICE_COLUMN列),特别是TotalPrice除以总数量。

这可能吗?如果是这样,我该怎么做?

我可以为源数据表创建另一个包含此值的列,并仅引用它,但如果我可以通过使用某些计算“trickery”来避免这样做,那将是更好的。

1 个答案:

答案 0 :(得分:2)

我通过在源数据表中添加一个额外的列来解决这个问题,通过进行上述计算来填充它(TotalPrice / TotalQty):

decimal avgPrice = 0.0M;
if ((TotalPrice > 0.0M) && (Quantity > 0))
{
    avgPrice = TotalPrice/Quantity;
}
cell = sourceDataSheet.Cells[_lastRowAddedPivotTableData, 10];
cell.PutValue(Math.Round(avgPrice, 2));

...然后相应地引用该新数据源列:

pivotTable.AddFieldToArea(Aspose.Cells.Pivot.PivotFieldType.Data, AVGPRICE_COLUMN);