2016-11-18 2 views
0

조건부로 피벗 테이블의 범위를 채색해야합니다. 나는 이런 식으로하려고 노력 :피벗 테이블 (Aspose 셀)이 생성하는 행 수는 어떻게 결정합니까?

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에 피벗 테이블에 행을하지 않기 때문에 그것은 작동하지 않습니다, 그래서 내 while 루프는 입력하지 않습니다.

피벗 테이블을 순환 할 수 있도록 시트에서 피벗 테이블의 행 수를 결정하려면 어떻게합니까?

아니면 내가 잘못 접근하고 있습니까? 피벗 테이블을 생성 한 후 스타일/형식을 조작하는 다른 표준 방법이 있습니까?

+0

미래의 노력과 * 마크 트웨인의 모험을 기원합니다 * –

+0

감사합니다, 제레미! –

답변

1

@B. Clay Shannon, 귀하는 귀하의 요구 사항에 다음 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); 

는 철저한 조사를 위해 Aspose.Cells support forum에서 스레드 (당신이 Excel 응용 프로그램에서 수동으로 만들 수 있음) 원하는 결과와 함께 샘플 스프레드 시트를 공유하시기 바랍니다.

참고 : 저는 Aspose에서 Developer Evangelist로 일하고 있습니다.

+0

그러면 어떤 것입니까? 내 rowsUsed int에 할당하여 전체 pivotTable을 반복합니다. - dataBodyRange.EndRow, 또는 ... ??? –

+0

내 자신의 하위 쿼리에 대답하려면 예, dataBodyRange.EndRow는 좋은 대답을 제공합니다 (필요하지 않은 열 총 행을 포함하지만, 충분히 쉽게 해결할 수 있습니다). –

+1

@B. Clay Shannon, 상황을 회피 할 수 있다는 것을 아는 것은 좋은 일입니다. – 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

좋아요, 방금 당신이 aspose-cells이라고 말한 것을 보았습니다. 어쩌면 그것이 개념이라고 생각했습니다. 이것은 interop입니다. 미안합니다. – Hambone

+0

저는 Aspose.Cells에 상당히 매혹되어 있습니다. 여기에 피벗 테이블을 만드는 방법에 대한 팁이 있습니다. http://www.codeproject.com/Tips/1156412/Create-a-PivotTable-Using-Aspose-Cells-for-NET-Csh –