Как я могу заменить автоматически генерируемые великие общие значения на разные (Aspose Cells)?

Моя таблица автоматически создает столбец «Grand Totals» в качестве самого правого столбца:

введите описание изображения здесь

Это хорошо, в общем. Но, в частности, у меня есть несколько проблем с этим: последние два значения (с неудачными ярлыками «Сумма цены» и «Сумма процента») дают именно это – сумму предыдущих столбцов. В таких случаях мне не нужна простая сумма, но среднее значение в первом случае и процент во втором случае.

Для AvgPrice мне нужен расчет «Сумма общей цены» / «Сумма итоговой суммы» в столбце Grand Total. Например, первое значение AvgPrice Grand Total должно быть «33.14», а не «66.26»,

В процентах мне нужен процент от общей цены за товар / описание (например, «25151,75», см. Первый пункт выше) по сравнению со значением «Общая цена» в общей сумме «Общая сумма общей цены» / column ("1529802.82"). Это значение видно здесь:

введите описание изображения здесь

Таким образом, значение «Процент» для этого первого элемента («ASPARAGUS, LARGE 11/1 #») должно быть приблизительно 1,6 (поскольку 25151,75 составляет около 1/60 от 1529802,82), а не 1,36.

Есть ли способ установить это для автоматического создания этих значений в Grand Total Column или мне нужно предотвратить создание столбца Grand Total следующим образом:

pivotTable.ColumnGrand = false; 

… и затем добавить этот столбец в лист вручную, выполнив вычисления в коде и добавив эти значения таким образом?

Чтобы подробно изучить эту проблему, отправьте свой запрос в форуме Aspose.Cells с вашими примерами файлов excel. Вы можете предоставить нам исходный файл excel, фактический выходной файл excel и ожидаемый файл excel и пример кода. И скриншот, как вы предоставили, также будет полезен. Спасибо за ваше сотрудничество в этом отношении.

Ссылка на сайт Aspose.Cells:

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

Примечание. Я работаю в качестве Evangelist разработчика в Aspose.

Мне кажется, проще всего просто добавить этот столбец вручную, вычисляя необходимые значения; вот как я это делаю сейчас (в основном та же идея, что и в Excel Interop – ручное добавление столбца Grand Total):

После кода PivotTable я вызываю 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 ())

Interesting Posts
Давайте будем гением компьютера.