Excel 如何用不同的值(Aspose单元格)替换自动生成的总计值?

Excel 如何用不同的值(Aspose单元格)替换自动生成的总计值?,excel,pivot-table,totals,aspose-cells,Excel,Pivot Table,Totals,Aspose Cells,我的电子表格会自动生成一个“总计”列作为最右边的列: 总的来说,这很好。但具体来说,我有几个问题:最后两个值(不幸的标签是“平均价格总和”和“百分比总和”)正好提供了这一点——前两列的总和。在这些情况下,我不想要一个简单的总数,而是第一种情况下的平均数和第二种情况下的百分比 对于AvgPrice,我需要的是在总计列中计算“总价之和”/“总质量之和”。例如,第一个平均价格总价值应为“33.14”,而不是“66.26” 对于百分比,我需要项目/说明的总价百分比(如上文第一项中的“25151.75”

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

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

对于AvgPrice,我需要的是在总计列中计算“总价之和”/“总质量之和”。例如,第一个平均价格总价值应为“33.14”,而不是“66.26”

对于百分比,我需要项目/说明的总价百分比(如上文第一项中的“25151.75”)与“总价之和”总计行/列中的“总价”值(“1529802.82”)相比。该值如下所示:

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

是否有一种方法可以将其设置为自动生成“总计”列中的那些值,或者我是否需要防止“总计”列这样生成:

pivotTable.ColumnGrand = false;

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

为了详细了解此问题,请在Aspose.Cells论坛中发布您的查询和示例excel文件。您可以向我们提供源excel文件、实际输出的excel文件以及预期的excel文件和示例代码。你提供的截图也会很有帮助。谢谢你在这方面的合作

Aspose.Cells论坛链接:


注意:我在Aspose担任开发人员福音传道者

为了详细了解这个问题,请在Aspose.Cells论坛中发布您的查询和示例excel文件。您可以向我们提供源excel文件、实际输出的excel文件以及预期的excel文件和示例代码。你提供的截图也会很有帮助。谢谢你在这方面的合作

Aspose.Cells论坛链接:


注意:我在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;
}
private void AddManualGrandTotalColumn()
{
var pivot=数据透视表。数据透视表[0];
var-dataBodyRange=pivot.dataBodyRange;
int rowsUsed=dataBodyRange.EndRow;
int FIRST_DATA_ROW=7;
int currentQtyRow=第一行数据;
int ROWS_在_A_范围内=4;
//需要吗?
RefreshData();
pivot.CalculateData();
//获取计算%val所需的总销售价值
Cell TotalPurchaseScell=pivotTableSheet.Cells[rowsUsed-2,_grandTotalsColumnPivotTable+1];
decimal TotalPurchases=Convert.ToDecimal(totalPurchasescell.Value);
Cell gtLabelCell=数据透视表。单元格[6,_grandTotalsColumnPivotTable+2];
gtLabelCell.Value=“总计”;
单元格QtyCell=null;
Cell-PriceCell=null;
单元格AvgPriceCell=null;
Cell PercentageCell=null;
while(currentQtyRow0)和&(数量>0))
{
平均价格=价格/数量;
}
AvgPriceCell=数据透视表单元格[currentQtyRow+2,_grandTotalsColumnPivotTable+2];
AvgPriceCell.Value=avg;
//计算百分比(总购买量/总价格?)
十进制prcntg=0.0M;
如果((TotalPurchases>0)和(&(price>0))/?计算是否正确?
{
prcntg=采购总额/价格;
}
PercentageCell=数据透视表。单元格[currentQtyRow+3,_grandTotalsColumnPivotTable+2];
PercentageCell.Value=prcntg;
currentQtyRow=currentQtyRow+范围内的行;
}
}
私有int GetSumTotalQty(int currentQtyRow)
{
第一个月的整数=2;
int LAST_MONTH_COL=\u grandTotalsColumnPivotTable;//-1;
整数累计数量=0;
单元格qtyCell=null;

对于(int i=FIRST\u MONTH\u COL;i我认为,手动添加该列,计算必要的值是最简单的;我现在是这样做的(基本上与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;
}
private void AddManualGrandTotalColumn()
{
var pivot=数据透视表。数据透视表[0];
var-dataBodyRange=pivot.dataBodyRange;
int rowsUsed=dataBodyRange.EndRow;
int FIRST_DATA_ROW=7;
int currentQtyRow=第一行数据;
int ROWS_在_A_范围内=4;
//需要吗?
RefreshData();
pivot.CalculateData();
//获取计算%val所需的总销售价值
Cell TotalPurchaseScell=pivotTableSheet.Cells[rowsUsed-2,_grandTotalsColumnPivotTable+1];
decimal TotalPurchases=Convert.ToDecimal(totalPurchasescell.Value);
单元格gtLabelCell=数据透视表。单元格[6,\u grandTo