ListRows.Count Returns 不一致的结果

ListRows.Count Returns Inconsistent Results

我有一个奇怪的问题,我的两个 Excel 表驻留在我项目的两个不同工作表上。我正在使用 VSTO,但 VBA 显示相同的结果:一个空 table 的行计数在一种情况下有 0 行,在另一种情况下有 1 行(我假设插入行)。

设置

两个工作表:工作表 1、工作表 2
两个对应的命名 Excel 表:Sheet1Table、Sheet2Table

两个table都是空的,即有一个空行,是不能删除的插入行。

我运行以下代码判断数据行数(即不包括表头行):

Microsoft.Office.Tools.Excel.ListObject sheet1Table = Globals.Sheet1.Sheet1Table;
int numberOfListRows1 = sheet1Table.ListRows.Count;

Microsoft.Office.Tools.Excel.ListObject sheet2Table = Globals.Sheet2.Sheet2Table;
int numberOfListRows2 = sheet2Table.ListRows.Count;

结果是 numberOfListRows1 是 1 而 numberOfListRows2 是 0 尽管结果(以正确者为准)应该是相同的。我比较了 table 和工作表属性,以及 Visual Studio 中的源文件,我没有发现任何差异。知道我应该寻找什么(哪个结果是正确的)?

在 VBA 中,我使用这些潜艇来测试你的情况:

Sub Sheet1TableRowsCount()
    Dim numberOfListRows1 As Integer
    Dim sheet1Table As ListObject
    Set sheet1Table = Sheet1.ListObjects("Sheet1Table")
    numberOfListRows1 = sheet1Table.ListRows.Count
    Set sheet1Table = Nothing
End Sub

Sub Sheet2TableRowsCount()
    Dim numberOfListRows2 As Integer
    Dim sheet2Table As ListObject
    Set sheet2Table = Sheet2.ListObjects("Sheet2Table")
    numberOfListRows2 = sheet2Table.ListRows.Count
    Set sheet2Table = Nothing
End Sub

这些是 table:

当通过选择 header 和一个空行然后将选择格式化为 table 创建(错误地)这些 table 时,它们有一个空行。该行没有内容,跨行COUNTA为0,看起来像插入行,无法删除。然而,它是一个有效的数据行,因此 ListRows.Count 将获得 1.

的值

类似地,如果您填写一些数据并手动删除这些输入的值(使用 Delete),这样您的 table 就会像开始时一样,结果仍然是 1.

如果您手动或以编程方式(使用类似 Sheet1.Range("Sheet1Table").Rows("1").Delete 的方式)删除行,则 ListRows.Count 将产生 0 的值。

确定数据行的实际计数的解决方案是检查ListRows.Count,如果结果为1 - 检查是否不包含实际值后删除该行。如果仅在单击 格式为 Table 之前通过选择 header 行来创建空 table,则可以避免整个情况。然后自动创建插入行,不计入数据行(本例中 ListRows.Count 的结果是 0)。