51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2883|回复: 10
打印 上一主题 下一主题

[求助] QTP中关于从本地EXCEL读入数据的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-7-7 10:37:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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遍
实在是百思不得其解,望大虾出手!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 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中验证过,仅供参考。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2009-7-7 14:01:20 | 只看该作者
读Excel尽量不要用COM Automation

最好用binary read库
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-7-7 14:35:27 | 只看该作者
datatable.SetCurrentRow(1)  把这个去掉就可以了
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-7-8 15:14:00 | 只看该作者

回复 2# 的帖子

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

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

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2009-7-8 15:14:27 | 只看该作者

回复 3# 的帖子

能给一段代码示例么。。。谢谢。。。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-7-8 15:39:36 | 只看该作者

回复 6# 的帖子

比如 ExcelPackage 或者 NPOI


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

[ 本帖最后由 shanxi 于 2009-7-8 16:57 编辑 ]
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2015-9-21 13:50
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]测试排长

    8#
    发表于 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
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2009-7-9 01:32:29 | 只看该作者

    回复 1# 的帖子

    只需要在Settings->Run中改下设置为只循环一次就好了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 2009-7-9 09:08:36 | 只看该作者
    原帖由 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

    不知道楼主是否解决。。上面的方法不知道能不能满足你。如果不能。再回贴。谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-25 11:11
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2009-7-9 10:52:19 | 只看该作者
    Settings->Run   9.2 版本在那?
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-23 05:24 , Processed in 0.089546 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表