在 excel sheet 到 VB.net 上应用自动过滤器

Applying Auto-filter on excel sheet through VB.net

我想知道我哪里出错了,我基本上想在 excel sheet 上应用自动过滤器,我正在通过 vb.net 打开,然后阅读过滤后的内容数据.

我几乎阅读了每个 vb/autofilter 相关的答案,但我一定是做错了什么,但似乎可以发现它!

xlWorkSheet = xlWorkBook.Sheets(2)
            xlWorkSheet.Name = "ACC"

            xlWorkSheet.Range("$A:$AE80").AutoFilter(Field:=31, Criteria1:="=Accepted")

            xlCell = xlWorkSheet.UsedRange
            intLstRowIdx = xlWorkSheet.Range("A" & xlWorkSheet.Rows.Count).End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row

            For rcnt = intLstRowIdx To 2 Step -1

                Dim Obj = CType(xlCell.Cells(rcnt, 31), excel.Range)

                If Obj.Text.ToString.ToUpper.Contains("ACC") = True Then

                    xlWorkSheet.Rows(rcnt).Delete()

                End If

            Next

我希望这样做的是将过滤器应用于 excel sheet 然后基本上让我所有的 records/rows 成为第 31 列具有 "Accepted" 在其中,因此我会尝试将删除行部分更改为更快的删除,例如删除范围等。

但是当我 运行 上面的代码它 运行s 和所有但它似乎没有保留甚至 运行 过滤器作为 "Rejected" 记录是仍然出现在我的 for 循环等

我感谢任何帮助的人,我真的已经尝试了很多,只知道我是愚蠢的,错过了一行,或者在我的代码中自相矛盾。

编辑 我已经使用 excel 记录了我在 excel 中执行过滤器的宏,xlWorkSheet.Range("$A:$AE80").AutoFilter(Field:=31, Criteria1:="=Accepted") 行是我得到的。

快速的方法是使用SpecialCells获取所有过滤范围。获取后可以一行删除所有行:

Dim rngTable, rngData, rngVisible As Excel.Range

'// Original data
rngTable = xlWorkSheet.Range("$A:$AE80")
'// Exclude header - we don't want it to take a part in filtering
With rngTable
    '// Offset range by one row and then resize it excluding last row.
    '// This way we obtain all cells without header.
    rngData = rngTable.Offset(1).Resize(.Rows.Count - 1)
End With

'// Filtering
rngData.AutoFilter(Field:=31, Criteria1:="=Accepted")

Try
    '// SpecialCells takes all visible cells (i.e. filtered), which is what we need.
    '// We need to use it in Try..Catch because if there are no filtered cells,
    '// this method will throw exception.
    rngVisible = rngData.SpecialCells(Excel.XlCellType.xlCellTypeVisible)
    '// Having obtained all cells, delete entire rows.
    rngVisible.EntireRow.Delete()
Catch ex As Exception
    '// We're here 'cause no rows were filtered
End Try