在数据透视表中用Excel Interop C#筛选出(空白)行

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

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

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

  1. 使原始数据成为表格而不是标准范围。 点击数据中的任意位置,然后从function区的“插入”选项卡中select“表格”,Excel将自动将您的范围转换为表格。

表格在一个范围内具有许多优点,而不是在添加或删除行时自动resize。 如果你的自动刷新不是删除行(只是内容),这是通过这样的事情来解决(假设“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(); } 
  1. 将数据透视表的数据源更改为表格(在Excel中 – 永久)。 这应该省略任何空行。

  2. 刷新您的数据透视表:

    pivotTb.RefreshTable();

如果你真的不想把你的范围转换成表,那么我build议你dynamic修改你的数据透视表的源数据。

下面是一个如何dynamic改变数据透视表的范围的例子,使用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(); 

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

如何获得Excel表格中占用的单元格的范围