QTP中关于从本地EXCEL读入数据的问题
filepath=pathfinder.Locate("D:\test.xls")datatable.Import(filepath)
datatable.SetCurrentRow(1)
a=datatable.Value("test")
print a
假设test.xls里有一个名称为test的列,里面有2行,内容分别是a和b
运行上面的代码,结果是把a打印了两遍(预期只是把a打出来一遍)
通过设断点跟踪,发现在import表格的时候,程序会根据表格行数进入相应的循环。例如表格有n行,则所有代码循环n遍
实在是百思不得其解,望大虾出手!!! Dim row_count,row_value
DataTable.Import ("D:\test.xls")
row_count=DataTable.GetSheet(1).GetRowCount
For i= 1 to row_count
row_value=DataTable.GetCurrentRow(i).value
print row_value
Next
个人觉得应该是这样的,不过没有在qtp中验证过,仅供参考。 读Excel尽量不要用COM Automation
最好用binary read库 datatable.SetCurrentRow(1)把这个去掉就可以了
回复 2# 的帖子
我也试了读sheet的方法 就没有问题了和runtime table相关,貌似放到global下就会跑多次,不知道是什么问题
回复 3# 的帖子
能给一段代码示例么。。。谢谢。。。回复 6# 的帖子
比如 ExcelPackage 或者 NPOI库Excel COM Automation不是线程安全,所以这样读Excel很容易导致程序挂起。
[ 本帖最后由 shanxi 于 2009-7-8 16:57 编辑 ]
回复 1# 的帖子
分析:因为你import进global这个sheet里面去了,这是全局的sheet,有几行数据就会执行action几次。
(如果你有a、b、c 3条数据,我想肯定会执行3次)
解决办法:
把import进action的sheet里面去。
代码:
filepath=pathfinder.Locate("D:test.xls")
datatable.ImportSheet filepath,1,"Action1"
datatable.SetCurrentRow(1)
a=datatable.RawValue("test","Action1")
print a
回复 1# 的帖子
只需要在Settings->Run中改下设置为只循环一次就好了 原帖由 steff720 于 2009-7-7 10:37 发表 http://bbs.51testing.com/images/common/back.giffilepath=pathfinder.Locate("D:\test.xls")
datatable.Import(filepath)
datatable.SetCurrentRow(1)
a=datatable.Value("test")
print a
假设test.xls里有一个名称为test的列,里面有2行,内容分别是 ...
有三点呀!
1.只需要在Settings->Run中改下设置为只循环一次就好了(hsjzfling说的。这里你也要设置)
2.ziva说的方法是正确的。至于代码是否能通过,要调试。
3.如果是把excel导入到datatable中的话。如果导入成功。可以直接循环Datatable。下面给你一段代码实例。
For Iterator = 1 To 8 Step 1 (从第一行运行到第8行。这儿写死点。)
msgbox DataTable("列名", dtLocalSheet)
DataTable.SetNextRow (当一行运行完了,你要指到下一行。)
Next
不知道楼主是否解决。。上面的方法不知道能不能满足你。如果不能。再回贴。谢谢! Settings->Run 9.2 版本在那?
页:
[1]