51Testing软件测试论坛

标题: QTP中关于从本地EXCEL读入数据的问题 [打印本页]

作者: steff720    时间: 2009-7-7 10:37
标题: 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遍
实在是百思不得其解,望大虾出手!!!
作者: ziva    时间: 2009-7-7 13:50
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中验证过,仅供参考。
作者: shanxi    时间: 2009-7-7 14:01
读Excel尽量不要用COM Automation

最好用binary read库
作者: wuei9090    时间: 2009-7-7 14:35
datatable.SetCurrentRow(1)  把这个去掉就可以了
作者: steff720    时间: 2009-7-8 15:14
标题: 回复 2# 的帖子
我也试了读sheet的方法 就没有问题了

和runtime table相关,貌似放到global下就会跑多次,不知道是什么问题
作者: steff720    时间: 2009-7-8 15:14
标题: 回复 3# 的帖子
能给一段代码示例么。。。谢谢。。。
作者: shanxi    时间: 2009-7-8 15:39
标题: 回复 6# 的帖子
比如 ExcelPackage 或者 NPOI


Excel COM Automation不是线程安全,所以这样读Excel很容易导致程序挂起。

[ 本帖最后由 shanxi 于 2009-7-8 16:57 编辑 ]
作者: fei.ge    时间: 2009-7-8 23:48
标题: 回复 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
作者: hsjzfling    时间: 2009-7-9 01:32
标题: 回复 1# 的帖子
只需要在Settings->Run中改下设置为只循环一次就好了
作者: jadeyu712    时间: 2009-7-9 09:08
原帖由 steff720 于 2009-7-7 10:37 发表
filepath=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

不知道楼主是否解决。。上面的方法不知道能不能满足你。如果不能。再回贴。谢谢!
作者: liujinkui    时间: 2009-7-9 10:52
Settings->Run   9.2 版本在那?




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2