如何提供基于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除以总数量。
这可能吗?如果是这样,我该怎么做?
我可以为源数据表创建另一个列,其中包含此值并仅引用它,但如果我可以通过使用某些计算“欺骗”来避免这样做,那将是更可取的。
答
我解决了这个通过添加一个额外的列我的源数据片,填充,通过使(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);
由于下面的Aspose.Cells Excel的逻辑,我想知道:你有没有试过,如果在您考虑的方法是可行的Excel中(即当您手动创建数据透视表,没有的Aspose。细胞)? –
是的,但我将它移植到Aspose Cells,因为Excel Interop太慢了,并且在某些情况下,即使在运行几个小时后,也不会生成该文件。 –
我从来没有手动创建数据透视表,但是我使用Excel Interop创建了该报表生成应用程序的前版本。 –