2016-11-25 1 views
-1

Я генерации таблицы с помощью этого вычисляемого поля: «#! Div/0»Как я могу предотвратить «# Div/0!» в расчетных ячейках (Aspose Cells)?

pivotTable.AddCalculatedField("Average Price", "=TotalPrice/TotalQty", true); 

Он работает как шарм большую часть времени, но один раз в некоторое время есть 0-значения, и, таким образом, производят , например, для второго и последнего элементов показано здесь:

enter image description here

Как я могу предотвратить это?

Вот PivotTable код создания в полном объеме, для более контекста:

private void PopulatePivotTableSheet() 
{ 
    int DESCRIPTION_COLUMN = 1; 
    int MONTHYR_COLUMN = 3; 
    int TOTALQTY_COLUMN = 4; 
    int TOTALPRICE_COLUMN = 5; 
    int PERCENTOFTOTAL_COLUMN = 7; 
    int MONTHLY_PERCENTAGE_COLUMN = 8; 
    int AVGPRICE_COLUMN = 10; 
    int COLUMNS_IN_DATA_SHEET = 11; 
    int HEADER_ROW = 8; 

    AddPreDataSectionToPivotTableSheet(); 

    PivotTableCollection pivotTables = pivotTableSheet.PivotTables; 
    int colcount = COLUMNS_IN_DATA_SHEET; 
    string lastColAsStr = ReportRunnerConstsAndUtils.GetExcelColumnName(colcount); 
    int rowcount = sourceDataSheet.Cells.Rows.Count; 
    string sourceDataArg = string.Format("sourceDataSheet!A1:{0}{1}", lastColAsStr, rowcount); 
    int index = pivotTableSheet.PivotTables.Add(sourceDataArg, "A6", "PivotTableSheet"); 
    PivotTable pivotTable = pivotTables[index]; 

    pivotTable.RowGrand = true; 
    pivotTable.ColumnGrand = true; 

    pivotTable.DisplayNullString = true; 
    pivotTable.NullString = "0"; 

    pivotTable.AddFieldToArea(PivotFieldType.Row, DESCRIPTION_COLUMN); 
    pivotTable.RowHeaderCaption = "Description"; 

    pivotTable.AddFieldToArea(PivotFieldType.Column, MONTHYR_COLUMN); 
    pivotTable.ColumnHeaderCaption = "Months"; 

    pivotTable.AddFieldToArea(PivotFieldType.Data, TOTALQTY_COLUMN); 
    pivotTable.DataFields[0].DisplayName = "Total Packages"; 

    pivotTable.AddFieldToArea(PivotFieldType.Data, TOTALPRICE_COLUMN); 
    pivotTable.DataFields[1].DisplayName = "Total Purchases"; 

    pivotTable.AddCalculatedField("Average Price", "=TotalPrice/TotalQty", true); 

    pivotTable.AddCalculatedField("PercentOfTotal", "=TotalPrice", true); 
    pivotTable.DataFields[3].DisplayName = "Percentage of Total"; 
    pivotTable.DataFields[3].DataDisplayFormat = PivotFieldDataDisplayFormat.PercentageOfColumn; 
    pivotTable.RowFields[0].IsAutoSubtotals = false; 

    PivotField field = pivotTable.RowFields[0]; 
    field.IsAutoSort = true; 
    field.IsAscendSort = false; 
    field.AutoSortField = 1; 
    pivotTable.PivotTableStyleType = PivotTableStyleType.PivotTableStyleLight16; 

    pivotTable.RefreshDataFlag = true; 
    pivotTable.RefreshData(); 
    pivotTable.CalculateData(); 
    pivotTable.RefreshDataFlag = false; 

    List<String> contractItemDescs = GetContractItemDescriptions(); 
    ColorizeContractItemBlocks(contractItemDescs); 
    HideItemsWithFewerThan1PercentOfSales(); 
    FreezePanePivotTable(HEADER_ROW, 2); 
    FormatPivotTableNumbers(); 

    Style style = workBook.CreateStyle(); 
    style.Font.Name = "Calibri"; 
    style.Font.Size = 12; 
    pivotTable.FormatAll(style); 

    sourceDataSheet.IsVisible = false; 
} 

ответ

1

Проверьте TotalQty равен нулю, прежде чем деление на него:

"=IF(TotalQty<>0,TotalPrice/TotalQty,0)" 

Третий аргумент значение для отображения, если TotalQty равен нулю.

1

Вы также можете попробовать:

IFERROR(TotalPrice/TotalQty,"") 

двойные кавычки могут быть равны нулю, если вы хотите.

1

просто использовать

если (ISBLANK ((диапазон ячейки), "", ваша функция здесь)

не

"" используется, чтобы показать, как пустую ячейку (пустой, как будто ничего есть написано здесь) в случае, если диапазон ячейки состоит не из чего-либо. в противном случае ваша функция будет работать, если какое-либо значение находится в клетках

Смежные вопросы