【问题标题】:Filter out (blank) row in pivot table with Excel Interop C#使用 Excel Interop C# 过滤掉数据透视表中的(空白)行
【发布时间】:2016-11-02 09:26:33
【问题描述】:

我有一个包含三个工作表、原始数据、数据透视表和数据透视图的 Excel。 由于原始数据将通过未知行数的代码进行更新,因此我选择了整列作为数据源。刷新数据透视表时,它总是会在原始数据中获得一些空行,因此数据透视表中会有一个(空白)行。

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

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

【问题讨论】:

    标签: c# excel pivot-table excel-interop


    【解决方案1】:
    1. 使原始数据成为表格而不是标准范围。单击数据内的任意位置,然后从功能区的“插入”选项卡中选择“表格”,Excel 会自动将您的范围转换为表格。

    表格在一定范围内具有许多优点,其中最重要的是在添加或删除行时它会自动调整大小。如果您的自动刷新以某种方式删除行(只是内容),则可以通过以下方式解决(假设“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();

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

    以下是如何动态更改数据透视表范围的示例,使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2016-09-18
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多