我怎样才能取代自动生成的总值与不同的(Aspose单元格)?

我的电子表格会自动生成一个“总计”列作为最右边的列:

在这里输入图像说明

一般来说这很好。 但具体而言,我遇到了一些问题:最后两个值(不幸的标签是“平均价格总和”和“总和百分比”)只是提供了前面几列的总和。 在这种情况下,我不想要一个简单的数字,但第一种情况下的平均值和第二种情况下的百分比。

对于AvgPrice,我需要的是在“总计”栏中计算“总价格总额”/“总计总额”。 例如,第一个AvgPrice总价值应该是“33.14”而不是“66.26”

对于百分比,我需要在总价格总计中的“总价格”总价格中,将项目/说明的总价格百分比(例如上面第一项中显示的“25151.75”)与总价格/列(“1529802.82”)。 这个价值在这里看到:

在这里输入图像说明

因此,第一项(“ASPARAGUS,大11/1#”)的“百分比”值应该是大约1.6(因为25151.75大约是1529802.82的1/60),而不是1.36。

有没有一种方法来设置这个自动生成这些值在盛大总计列,或者我需要防止生成总额列像这样:

pivotTable.ColumnGrand = false; 

…然后将该列手动添加到工作表,在代码中进行计算,并以这种方式添加这些值?

为了详细了解这个问题,请在您的示例excel文件中将您的查询张贴在Aspose.Cells论坛中。 您可以提供我们源程序的excel文件,实际输出excel文件和预期的excel文件和示例代码。 像你提供的截图也将有所帮助。 感谢您在这方面的合作。

Aspose.Cells论坛链接:

https://www.aspose.com/community/forums/aspose.cells-product-family/19/showforum.aspx

注意:我在Aspose作为Developer Evangelist工作

我认为最简单的方法就是手动添加该列,计算必要的值; 这里是我现在做的(基本上和Excel Interop中的想法一样 – 手动添加Grand Total列):

数据透视表代码后,我调用AddManualGrandTotalColumn(),它是:

 private void AddManualGrandTotalColumn() { var pivot = pivotTableSheet.PivotTables[0]; var dataBodyRange = pivot.DataBodyRange; int rowsUsed = dataBodyRange.EndRow; int FIRST_DATA_ROW = 7; int currentQtyRow = FIRST_DATA_ROW; int ROWS_IN_A_RANGE = 4; // Needed? pivot.RefreshData(); pivot.CalculateData(); // Get Total Sales value, which will be needed for computing the % val Cell totalTotalPurchasesCell = pivotTableSheet.Cells[rowsUsed - 2, _grandTotalsColumnPivotTable + 1]; decimal totalTotalPurchases = Convert.ToDecimal(totalTotalPurchasesCell.Value); Cell gtLabelCell = pivotTableSheet.Cells[6, _grandTotalsColumnPivotTable + 2]; gtLabelCell.Value = "Grand Total"; Cell QtyCell = null; Cell PriceCell = null; Cell AvgPriceCell = null; Cell PercentageCell = null; while (currentQtyRow < rowsUsed) { // SumTotalQty int qty = GetSumTotalQty(currentQtyRow); QtyCell = pivotTableSheet.Cells[currentQtyRow, _grandTotalsColumnPivotTable + 2]; QtyCell.Value = qty; // SumTotalPrice decimal price = GetSumTotalPrice(currentQtyRow+1); PriceCell = pivotTableSheet.Cells[currentQtyRow+1, _grandTotalsColumnPivotTable + 2]; PriceCell.Value = price; // Calculate Avg Price (SumTotalPrice / SumTotalQty) decimal avg = 0.0M; if ((price > 0) && (qty > 0)) { avg = price / qty; } AvgPriceCell = pivotTableSheet.Cells[currentQtyRow+2, _grandTotalsColumnPivotTable + 2]; AvgPriceCell.Value = avg; // Calculate Percentage (totalTotalPurchases / SumTotalPrice?) decimal prcntg = 0.0M; if ((totalTotalPurchases > 0) && (price > 0)) // ? Right calculation? { prcntg = totalTotalPurchases / price; } PercentageCell = pivotTableSheet.Cells[currentQtyRow+3, _grandTotalsColumnPivotTable + 2]; PercentageCell.Value = prcntg; currentQtyRow = currentQtyRow + ROWS_IN_A_RANGE; } } private int GetSumTotalQty(int currentQtyRow) { int FIRST_MONTH_COL = 2; int LAST_MONTH_COL = _grandTotalsColumnPivotTable; // - 1; int cumulativeQty = 0; Cell qtyCell = null; for (int i = FIRST_MONTH_COL; i <= LAST_MONTH_COL; i++) { qtyCell = pivotTableSheet.Cells[currentQtyRow, i]; cumulativeQty = cumulativeQty + Convert.ToInt32(qtyCell.Value); } return cumulativeQty; } 

。 。 。 (等GetSumTotalPrice())