2016-11-21 26 views
0

我的電子表格自動生成「的總計」欄的最右邊一列:如何用不同的值(Aspose Cells)替換自動生成的總值?

enter image description here

這是很好的,一般。但具體而言,我遇到了一些問題:最後兩個值(不幸的標籤是「平均價格總和」和「總和百分比」)提供了這一點 - 這是以前各欄的總和。在這些情況下,我不想要一個簡單的總和,但是第一種情況下的平均值和第二種情況下的百分比。

對於AvgPrice,我需要的是在「總計」欄中計算「總價格總和」/「總額度總和」。例如,第一個AvgPrice總計值應該是「33.14」而不是「66.26」

對於百分比,我需要項目/說明的總價格百分比(例如第一項中顯示的「25151.75」 )與「總價格總額」總計行/列(「1529802.82」)中的「總價」值相比較。該值是在這裏看到:

enter image description here

所以對於第一項(「蘆筍,大1分之11#」)中的「百分比」值約爲1.6(如25151.75大約是1529802.82 1/60 ),而不是1.36。

是否有此設置來自動生成在總計列的值的方式,或者我需要防止像這樣產生的總計列:

pivotTable.ColumnGrand = false; 

...和然後將該列手動添加到工作表,在代碼中進行計算,然後以這種方式添加這些值?

回答

1

最簡單的方法,我想,只需添加該列手動計算必要的值;這裏就是我怎麼做,現在(基本上是相同的想法在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())

1

爲了詳細瞭解此問題,請將您的查詢與您的示例excel文件一起發佈到Aspose.Cells論壇。你可以提供我們的源代碼excel文件,實際輸出excel文件和預期的excel文件和示例代碼。像你提供的截圖也會有幫助。感謝您在這方面的合作。

的Aspose.Cells論壇鏈接:

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

注:我作爲開發者傳道工作在閱讀Aspose

+0

我不知道如何在Excel中做到這一點;我用代碼完成了這一切。 –

+1

此線程已被標記爲已解決,並附帶您提供的代碼。 – shakeel