首页 文章

使用Excel Interop C#过滤透视表中的(空白)行

提问于
浏览
3

我有一个excel有三个工作表,原始数据,数据透视表和数据透视表 . 由于原始数据将由具有未知行数的代码更新,因此我选择整列作为数据源 . 刷新数据透视表时,它始终在原始数据中获得一些空行,因此数据透视表中将有一个(空白)行 .

我想过滤掉同一程序中的(空白)行 . 到目前为止,我已经阅读了excel文件,但我不知道如何过滤(空白)行,谢谢 .

Application exApp = new Application();
        Workbook exWbk = exApp.Workbooks.Open(targetPath);
        PivotTable pivotTb = exWbk.Sheets[1].pivotWorkSheet.PivotTables("Report");

1 回答

  • 2
    • 使原始数据成为表而不是标准范围 . 单击数据内的任意位置,然后从功能区中的"Insert"选项卡中选择"Table,",Excel将自动将您的范围转换为表格 .

    表在一个范围内具有许多优点,其中最重要的是在添加或删除行时自动调整大小 . 如果您的自动刷新以某种方式 not 删除行(只是内容),这是通过这样的方式解决(假设"Table1"是您的表的名称):

    Excel.ListObject lo = exWbk.Worksheets["Sheet1"].ListObjects["Table1"];
    foreach (Excel.ListRow rw in lo.ListRows)
    {
        if (exApp.WorksheetFunction.CountA(rw.Range) == 0)
            rw.Delete();
    }
    
    • 将数据透视表的数据源更改为表(在Excel中 - 永久) . 这应该省略任何空白行 .

    • 刷新数据透视表:

    pivotTb.RefreshTable();

    如果您真的不想将范围转换为表格,那么我建议您动态修改数据透视表的源数据 .

    下面是一个如何动态更改数据透视表的范围的示例,使用A1:C8作为示例范围:

    Excel.Range r = exWbk.Worksheets["Sheet1"].Range["A1:C8"];
    Excel.PivotCache pc = exWbk.PivotCaches().Create(
        Excel.XlPivotTableSourceType.xlDatabase, r);
    pivotTb.ChangePivotCache(pc);
    pivotTb.RefreshTable();
    

    关于如何定义使用范围的建议不乏,但万一你没有办法:

    How to get the range of occupied cells in excel sheet

相关问题