如何用不同的值(Aspose Cells)替换自动生成的总计值?
How can I replace automatically-generated grand total values with different ones (Aspose Cells)?
我的spreadsheet自动生成一个"Grand Totals"列作为最右边的列:
这很好,总的来说。但具体来说,我遇到了几个问题:最后两个值(带有不幸的标签 "Sum of Avg Price" 和 "Sum of Percentage")仅提供 - 前几列的总和。在那些情况下,我不想要一个简单的总和,而是第一种情况的平均值和第二种情况的百分比。
对于 AvgPrice,我需要计算总计列中的 "Sum of Total Price" / "Sum of Total Quty"。例如,第一个 AvgPrice Grand Total 值应该是“33.14”而不是“66.26”
对于百分比,我需要 item/Description 的总价百分比(例如上面第一项中的“25151.75”)与 "Total Price" 中的值相比37=] 总计 row/column(“1529802.82”)。该值见此处:
因此第一项 ("ASPARAGUS, LARGE 11/1#") 的 "Percentage" 值应约为 1.6(因为 25151.75 约为 1529802.82 的 1/60),而不是 1.36。
有没有办法将其设置为在总计列中自动生成这些值,或者我是否需要像这样防止生成总计列:
pivotTable.ColumnGrand = false;
...然后将该列手动添加到 sheet,在代码中进行计算,然后以这种方式添加这些值?
为了详细研究这个问题,请 post 在 Aspose.Cells 论坛中使用您的示例 excel 文件进行查询。您可以向我们提供源 excel 文件、实际输出 excel 文件和预期的 excel 文件和示例代码。您提供的屏幕截图也会有所帮助。感谢您在这方面的配合。
Aspose.Cells 论坛 Link:
https://www.aspose.com/community/forums/aspose.cells-product-family/19/showforum.aspx
注意:我在 Aspose 担任开发人员布道师
我认为最简单的方法是手动添加该列,计算必要的值;这是我现在的做法(与 Excel Interop 中的想法基本相同 - 手动添加总计列):
在数据透视表代码之后,我调用了 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())
我的spreadsheet自动生成一个"Grand Totals"列作为最右边的列:
这很好,总的来说。但具体来说,我遇到了几个问题:最后两个值(带有不幸的标签 "Sum of Avg Price" 和 "Sum of Percentage")仅提供 - 前几列的总和。在那些情况下,我不想要一个简单的总和,而是第一种情况的平均值和第二种情况的百分比。
对于 AvgPrice,我需要计算总计列中的 "Sum of Total Price" / "Sum of Total Quty"。例如,第一个 AvgPrice Grand Total 值应该是“33.14”而不是“66.26”
对于百分比,我需要 item/Description 的总价百分比(例如上面第一项中的“25151.75”)与 "Total Price" 中的值相比37=] 总计 row/column(“1529802.82”)。该值见此处:
因此第一项 ("ASPARAGUS, LARGE 11/1#") 的 "Percentage" 值应约为 1.6(因为 25151.75 约为 1529802.82 的 1/60),而不是 1.36。
有没有办法将其设置为在总计列中自动生成这些值,或者我是否需要像这样防止生成总计列:
pivotTable.ColumnGrand = false;
...然后将该列手动添加到 sheet,在代码中进行计算,然后以这种方式添加这些值?
为了详细研究这个问题,请 post 在 Aspose.Cells 论坛中使用您的示例 excel 文件进行查询。您可以向我们提供源 excel 文件、实际输出 excel 文件和预期的 excel 文件和示例代码。您提供的屏幕截图也会有所帮助。感谢您在这方面的配合。
Aspose.Cells 论坛 Link:
https://www.aspose.com/community/forums/aspose.cells-product-family/19/showforum.aspx
注意:我在 Aspose 担任开发人员布道师
我认为最简单的方法是手动添加该列,计算必要的值;这是我现在的做法(与 Excel Interop 中的想法基本相同 - 手动添加总计列):
在数据透视表代码之后,我调用了 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())