为何DataTable.GetRowCount返回行数远超有效数据行数?脚本读取空白行求助
嘿,这个问题我之前碰到好多次了,结合你描述的情况,主要有这几个可能的原因:
Excel的「已使用区域」被意外扩展了
你导入的Excel文件里,虽然只有4行有效数据,但第5到999行可能曾经被编辑过——比如输入过内容又删掉,或者设置过单元格格式(比如改个字体颜色)。Excel会把这些行标记为「已使用区域」(UsedRange),UFT的DataTable是基于这个区域来统计行数的,所以就会把这些空行也算进去,导致GetRowCount返回999。UFT DataTable的默认空白行没被覆盖
当你新建DataTable工作表时,UFT默认会生成一批空白行(早期版本通常是1000行左右)。如果你导入数据时只覆盖了前4行,剩下的默认空白行依然会被统计,所以总数就变成了999(可能刚好是默认行数减1)。导入时没限定有效数据区域
如果你是直接导入整个Excel工作表,而不是指定只导入A1:D4这类有效区域,UFT会把Excel里所有被标记为已使用的行(包括空的)都加载进来,自然行数就不对了。
先清理Excel的已使用区域
打开原Excel文件,选中第5行到最后一行,右键选择「删除整行」,然后保存文件。再重新导入到UFT里,此时GetRowCount应该就能返回正确的4行了。导入时指定精确的数据区域
在UFT导入Excel数据的步骤里,别选整个工作表,而是手动指定有效数据的范围(比如Sheet1!A1:D4),这样只会加载你需要的行。脚本里加空行判断逻辑
要是没法修改原Excel文件,就在脚本里遍历行的时候,检查关键列是否为空,遇到空行就停止迭代。比如写个VBScript代码片段:Dim currentRow, totalRows totalRows = DataTable.GetSheet(3).GetRowCount For currentRow = 1 To totalRows ' 假设第一列是关键列,判断是否为空 If DataTable.Value(1, 3) = "" Then Exit For End If ' 这里放你的业务处理代码 Next
内容的提问来源于stack exchange,提问作者Mrigaja Shelke

