2016-11-18 4 views
0

Мне нужно условно раскрасить диапазоны в сводной таблице. Я пытался сделать это таким образом:Как определить, сколько строк генерирует сводная таблица (Aspose Cells)?

private void ColorizeContractItemBlocks(List<string> contractItemDescs) 
{ 
    int FIRST_DESCRIPTION_ROW = 7; 
    int DESCRIPTION_COL = 1; 
    int ROWS_BETWEEN_DESCRIPTIONS = 4; 
    int rowsUsed = pivotTableSheet.Cells.Rows.Count; 
    int currentRowBeingExamined = FIRST_DESCRIPTION_ROW; 
    // 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; 
    } 
} 

... но она не работает, потому что rowsUsed не принимает во внимание строки на сводную таблицу на pivotTableSheet, и поэтому мое время цикла никогда не вошел.

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

Или я приближаюсь к этому неправильно? Существует ли другой стандартный способ управления стилями/форматированием сводной таблицы после ее создания?

+0

Желаю вам удачи в ваших будущих начинаниях и * Приключения Марка Твена * –

+0

Спасибо, Джереми! –

ответ

1

@B. Клей Шеннон, вы можете использовать любой из следующих API для вашего требования. Я добавил комментарии к коду для справки.

var book = new Workbook(dir + "sample.xlsx"); 
var sheet = book.Worksheets[0]; 
var pivot = sheet.PivotTables[0]; 

// DataBodyRange returns CellArea that represents range between the header row & insert row 
var dataBodyRange = pivot.DataBodyRange; 
Console.WriteLine(dataBodyRange); 
// TableRange1 returns complete Pivot Table area except page fields 
var tableRange1 = pivot.TableRange1; 
Console.WriteLine(tableRange1); 
// TableRange2 returns complete Pivot Table area including page fields 
var tableRange2 = pivot.TableRange2; 
Console.WriteLine(tableRange2); 
// ColumnRange returns range that represents the column area of the Pivot Table 
var columnRange = pivot.ColumnRange; 
Console.WriteLine(columnRange); 
// RowRange returns range that represents the row area of the Pivot Table 
var rowRange = pivot.RowRange; 
Console.WriteLine(rowRange); 

В случае, если вы все еще сталкиваются какие-либо трудности, пожалуйста, поделитесь ваш образец таблицы вместе с желаемыми результатами (которые вы можете создать вручную в приложении Excel) в потоке на Aspose.Cells support forum для тщательного изучения.

Примечание: Я работаю евангелистом-разработчиком в Aspose.

+0

Итак, какой из них я хотел бы назначьте мои строкиUsed int, чтобы перебрать всю сводную таблицу - dataBodyRange.EndRow или ... ??? –

+0

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

+1

@B. Клей Шеннон, Хорошо знать, что вы можете обходить ситуацию. – Prorata

1

RowRange свойства сводной таблицы должен взять вас грести по строкам через каждый элемент в таблице:

Excel.Worksheet ws = wb.Sheets["Sheet1"]; 
Excel.PivotTable pt = ws.PivotTables("PivotTable1"); 
Excel.Range cell; 

foreach (Excel.Range row in pt.RowRange) 
{ 
    cell = ws.Cells[row.Row, 5]; // for example, whatever is in column E 
    // do your formatting here 
} 

Есть другие диапазоны доступны - например, я обычно забочусь только о том:

pt.DataBodyRange 

Это каждая ячейка в фактической сводной таблице (независимо от того, что агрегируется).

+0

Хорошо, я только что заметил, что вы сказали, что ячейки-объекты - я не понимал, что это инструмент; Я подумал, может быть, это была концепция. Это interop. Извини за это. – Hambone

+0

Я очень влюблен в Aspose.Cells; Я написал отзыв о создании сводной таблицы с ней здесь: http://www.codeproject.com/Tips/1156412/Create-a-PivotTable-Using-Aspose-Cells-for-NET-Csh –

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

  • Нет связанных вопросов^_^