使用Excel Interop c#筛选数据透视表中的(空白)行

本文关键字:空白 透视 Interop Excel 筛选 数据 使用 | 更新日期: 2023-09-27 18:16:06

我有一个excel与三个工作表,原始数据,透视表和透视图。由于原始数据将由行数未知的代码更新,因此我选择整个列作为数据源。当数据透视表刷新时,它总是在原始数据中得到一些空行,因此数据透视表中会有一个(空白)行。

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

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

使用Excel Interop c#筛选数据透视表中的(空白)行

  1. 使原始数据成为表格而不是标准范围。点击数据内的任何位置,从ribbon中的"Insert"选项卡中选择"Table",Excel将自动将您的范围转换为表格。

与范围相比,Table有很多优点,其中最重要的一点是,当添加或删除行时,它会自动调整大小。如果您的自动刷新以某种方式而不是删除行(仅删除内容),则可以通过以下方式解决(假设"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();
}
  • 将数据透视表的数据源更改为table(在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();
    

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

    如何获取excel工作表中已占用单元格的范围