Почему ячейка со значением считается нулевой (ячейки Aspose)?

Мне нужно перебрать сводную таблицу и раскрасить определенные диапазоны. Я пытаюсь сделать это с помощью следующего кода:

private void ColorizeContractItemBlocks(List<string> contractItemDescs)
{
    int FIRST_DESCRIPTION_ROW = 7;
    int DESCRIPTION_COL = 0;
    int ROWS_BETWEEN_DESCRIPTIONS = 4;
    var pivot = pivotTableSheet.PivotTables[0];
    // DataBodyRange returns CellArea that represents range between the header row & insert row
    var dataBodyRange = pivot.DataBodyRange;
    int currentRowBeingExamined = FIRST_DESCRIPTION_ROW;
    int rowsUsed = dataBodyRange.EndRow;
    // Loop through PivotTable data, colorizing contract items
    while (currentRowBeingExamined < rowsUsed)
    {
        Cell descriptionCell = pivotTableSheet.Cells[currentRowBeingExamined, DESCRIPTION_COL];
        String desc = descriptionCell.Value.ToString();
        if (contractItemDescs.Contains(desc))
        {
            // args are firstRow, firstColumn, totalRows, totalColumns
            Range rangeToColorize = pivotTableSheet.Cells.CreateRange(
                currentRowBeingExamined, 0,
                ROWS_BETWEEN_DESCRIPTIONS, _grandTotalsColumnPivotTable + 1);
            Style style = workBook.Styles[workBook.Styles.Add()];
            style.BackgroundColor = CONTRACT_ITEM_COLOR;
            StyleFlag styleFlag = new StyleFlag();
            styleFlag.All = true;
            rangeToColorize.ApplyStyle(style, styleFlag);
        }
        currentRowBeingExamined = currentRowBeingExamined + ROWS_BETWEEN_DESCRIPTIONS;
    }
}

Проблема в том, что он падает во второй строке ниже, потому что "descriptionCell" считается нулевым значением:

Cell descriptionCell = pivotTableSheet.Cells[currentRowBeingExamined, DESCRIPTION_COL];
String desc = descriptionCell.Value.ToString();

Первый раз происходит сбой в цикле, когда значение currentRowBeingExamined равно 7. Имея в виду, что строки и столбцы Aspose Cells основаны на 0, вы можете видеть, что "A8" (на языке электронных таблиц), что соответствует строке 7, Столбец 0, согласно предположению Aspose Cells, действительно имеет значение, а именно "ANISE, FENNEL 12 CT":

Пройдя по ней, я вижу: "A8; ValueType: IsNull"

Итак, почему присвоение descriptionCell равно нулю, а не "ANISE, FENNEL 12 CT"?

Примечание. ColorizeContractItemBlocks() вызывается после создания сводной таблицы. Если я закомментирую вызов ColorizeContractItemBlocks(), генерируется электронная таблица с сводной таблицей, как вы можете видеть на скриншоте выше.

ОБНОВИТЬ

Только для Hec Ramsey я попытался захватить один ряд вниз и один столбец справа:

Cell descriptionCell = pivotTableSheet.Cells[8, 1]; // should be "Sum of TotalPrice"
Cell descriptionCell = pivotTableSheet.Cells[7, 1]; // should be "Sum of TotalQty"

... но оба также нулевые; что-нибудь в сводной таблице рассматривается как ненулевое?

ОБНОВЛЕНИЕ 2

Я думал, что я был на что-то (а не на что-то), когда я попытался это:

Cell descCell = pivot.GetCellByDisplayName("A8");

... но апостолы аннулировали его.

1 ответ

Решение

Эти вызовы должны быть добавлены вне цикла while:

pivot.RefreshData();
pivot.CalculateData();
Другие вопросы по тегам