【问题标题】:How can I replace automatically-generated grand total values with different ones (Aspose Cells)?如何用不同的值(Aspose Cells)替换自动生成的总计值?
【发布时间】:2021-08-19 00:34:56
【问题描述】:

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

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

对于 AvgPrice,我需要计算总计列中的“总价格总和”/“总数量总和”。例如,第一个 AvgPrice Grand Total 值应该是“33.14”而不是“66.26”

对于百分比,我需要项目/描述的总价(例如上面第一项中看到的“25151.75”)与“总价总和”中的“总价”值的百分比总计行/列(“1529802.82”)。此处显示该值:

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

有没有办法将其设置为在总计列中自动生成这些值,或者我是否需要阻止生成总计列,如下所示:

pivotTable.ColumnGrand = false;

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

【问题讨论】:

    标签: excel pivot-table aspose-cells


    【解决方案1】:

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

    Aspose.Cells 论坛链接:

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

    注意:我在 Aspose 担任开发人员宣传员

    【讨论】:

    • 我不知道如何在 Excel 中正确执行;我都是用代码完成的。
    • 该线程已被您提供的代码标记为已解决。
    【解决方案2】:

    我认为,最简单的方法是手动添加该列,计算必要的值;这就是我现在的做法(基本上与 Excel 互操作中的想法相同 - 手动添加总计列):

    在数据透视表代码之后,我调用了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() 等)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多