steff720 发表于 2009-7-7 10:37:43

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:13

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:20

读Excel尽量不要用COM Automation

最好用binary read库

wuei9090 发表于 2009-7-7 14:35:27

datatable.SetCurrentRow(1)把这个去掉就可以了

steff720 发表于 2009-7-8 15:14:00

回复 2# 的帖子

我也试了读sheet的方法 就没有问题了

和runtime table相关,貌似放到global下就会跑多次,不知道是什么问题

steff720 发表于 2009-7-8 15:14:27

回复 3# 的帖子

能给一段代码示例么。。。谢谢。。。

shanxi 发表于 2009-7-8 15:39:36

回复 6# 的帖子

比如 ExcelPackage 或者 NPOI库


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

[ 本帖最后由 shanxi 于 2009-7-8 16:57 编辑 ]

fei.ge 发表于 2009-7-8 23:48:58

回复 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:29

回复 1# 的帖子

只需要在Settings->Run中改下设置为只循环一次就好了

jadeyu712 发表于 2009-7-9 09:08:36

原帖由 steff720 于 2009-7-7 10:37 发表 http://bbs.51testing.com/images/common/back.gif
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:19

Settings->Run   9.2 版本在那?
页: [1]
查看完整版本: QTP中关于从本地EXCEL读入数据的问题