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

问题描述:

我将数据字段添加到数据透视表所示:如何提供基于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除以总数量。

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

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

+0

由于下面的Aspose.Cells Excel的逻辑,我想知道:你有没有试过,如果在您考虑的方法是可行的Excel中(即当您手动创建数据透视表,没有的Aspose。细胞)? –

+0

是的,但我将它移植到Aspose Cells,因为Excel Interop太慢了,并且在某些情况下,即使在运行几个小时后,也不会生成该文件。 –

+0

我从来没有手动创建数据透视表,但是我使用Excel Interop创建了该报表生成应用程序的前版本。 –

我解决了这个通过添加一个额外的列我的源数据片,填充,通过使(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);