簡體   English   中英

如何確定數據透視表生成多少行(Aspose Cells)?

[英]How can I determine how many rows a PivotTable generates (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上數據透視表上的行,因此從不輸入while循環。

如何確定數據透視表在工作表上占據多少行,以便可以遍歷數據透視表?

還是我以錯誤的方式來處理? 數據透視表生成后,是否有其他不同的標准方式來處理數據透視表的樣式/格式?

數據透視表的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

哪個是實際數據透視表中的每個單元(無論正在匯總什么)。

@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支持論壇的一個線程中共享示例電子表格以及所需的結果(可以在Excel應用程序中手動創建),以進行深入研究。

注意我在Aspose擔任開發人員推廣人員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM