51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3762|回复: 15
打印 上一主题 下一主题

[原创] Excel做数据驱动,调用数据时出错

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-7-19 13:59:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想从excel表里读取数据来实现文本框里的数据更新,可是不知为什么在调用数据的时候老是说我参数错误,请指教!

经调试后错误图片如下:

[ 本帖最后由 Dorpnight 于 2007-7-19 14:47 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2007-7-19 14:00:58 | 只看该作者

回复 #1 Dorpnight 的帖子

下面是代码:

Count=1
Datatable.Import("D:\ContentName.xls")
For i=1 To Count
msgbox Count
Browser("").Page("6").WebEdit("contentName").Set DataTable(ContentName,dtLocalSheet)
DataTable.GetSheet("Action1").SetNextRow
Next
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2007-7-19 15:21:36 | 只看该作者
    Set DataTable(ContentName,dtLocalSheet)

    变量ContentName 的值不正确
    只能是字符串,或者整数的index
    如:
    DataTable(“第一列”,dtLocalSheet)
    DataTable(1,2)

    同时import后最好设置个断点,保证xls中的数据真正导入到DataTable中


    u may try
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2007-7-19 15:49:53 | 只看该作者

    回复 #3 rivermen 的帖子

    Set DataTable("ContentName",dtLocalSheet)
    还是同样的错误说找不到ContentName这个列,但是我在result report可以看到数据全部引用了,thanks for rivermen
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    5#
    发表于 2007-7-19 16:33:03 | 只看该作者
    "ContentName" 是不是你Datatable的列名呢?
    你把DataTable 导入数据后的情况贴出来
    ps:导入后适当wait

    [ 本帖最后由 rivermen 于 2007-7-19 16:34 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2007-7-19 17:06:45 | 只看该作者
    原帖由 Dorpnight 于 2007-7-19 14:00 发表
    下面是代码:

    Count=1
    Datatable.Import("D:\ContentName.xls")
    For i=1 To Count
    msgbox Count
    Browser("").Page("6").WebEdit("contentName").Set DataTable(ContentName,dtLocalSheet)
    DataTable.Ge ...


    lz的采用这种方式,在excel文件中,QTP是指向第一行的,建议这样试试:
    Datatable.Import("D:\ContentName.xls")
    Count=DataTable.GetRowCount
    For i=1 To Count 'i的值表示QTP查找到Excel的第几行
    Browser("").Page("6").WebEdit("contentName").Set DataTable(i,j) 'j的值是ContentName在表中的列数
    DataTable.SetNextRow
    End For

    have a try!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    7#
    发表于 2007-7-19 17:48:16 | 只看该作者

    回复 #6 wuzhuayu 的帖子

    Description
    DataTable default property. Retrieves or sets the value of the cell in the specified parameter and the current row of the run-time Data Table.

    Note: This property returns the computed value of the cell. For example, if the cell contains a formula, the method returns True or False.

    Syntax
    To find the value:

    DataTable.Value(ParameterID [, SheetID])

    or

    DataTable(ParameterID [, SheetID])

    To set the value:

    DataTable.Value(ParameterID [, SheetID])=NewValue

    or

    DataTable(ParameterID [, SheetID]) =NewValue



    Argument
    Type
    Description

    ParameterID  Variant  Identifies the parameter (column) of the value to be set/retrieved. Index values begin with 1.  
    SheetID  Variant  Optional. Identifies the sheet to be returned. The SheetID can be the sheet name, index or dtLocalSheet, or dtGlobalSheet.
    If no Sheet is specified, the first sheet in the run-time Data Table is used (the global sheet for tests, or the component sheet for business components). Index values begin with 1.  
    NewValue  String  Sets the value for the specified table cell.  


    Example
    The following example uses the Value property to set the value in the current row of the Destination parameter (column) in the "ActionA" sheet in the run-time Data Table.

    DataTable.Value ("Destination", "ActionA")="New York"

    The following example uses the Value property to set the value in the current row of the second parameter (column) in the third sheet.

    DataTable.Value (2,3)="New York"

    Note: You could omit the word Value in the statements above, because Value is the default property for the DataTable object.

    The following example uses the default property to set the value in the current row of the Destination parameter (column) in the current (active) local sheet.

    DataTable("Destination", dtlocalSheet)="New York"
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2007-7-19 17:59:13 | 只看该作者
    楼上的意思是我搞错了?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2007-7-19 18:07:35 | 只看该作者
    是搞错了,呵呵。应该是:
    Datatable.Import("D:\ContentName.xls")
    Count=DataTable.GetRowCount
    For i=1 To Count 'i的值表示QTP查找到Excel的第几行
    Browser("").Page("6").WebEdit("contentName").Set DataTable(j,1) 'j的值是ContentName在表中的列数
    DataTable.SetNextRow
    End For
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    10#
    发表于 2007-7-19 18:10:45 | 只看该作者

    回复 #9 wuzhuayu 的帖子

    dataTable(i,j)
    DataTable(ParameterID [, SheetID])

    前面的 i 代表 哪一个列(参数)
    后面的 j 代表 哪一个Sheet (GlobalSheet,LocaSheet)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
     楼主| 发表于 2007-7-20 09:45:59 | 只看该作者

    回复 #10 rivermen 的帖子

    谢谢楼上各位的热心回复

    按照你们的思路我修改了一下脚本,运行成功,下面我把正确的脚本贴上来:
    Dim Count
    Dim j
    Datatable.Import("D:\ContentName.xls")
    Count=DataTable.GetRowCount
    For i=1 To Count
       'msgbox aa
            Browser("").Page("").WebEdit("contentName").Set DataTable(1,LocaSheet)
    DataTable.SetNextRow
    Next
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
     楼主| 发表于 2007-7-20 10:17:35 | 只看该作者

    回复 #11 Dorpnight 的帖子

    出现另一个问题,关于这段脚本
    按照上面的脚本运行时,发现如果excel表里有10列数据,整个代码就自动迭代运行十次。这也太可怕了,嗬嗬,大概和我的设置有关吧,我先查查看
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
     楼主| 发表于 2007-7-20 10:36:51 | 只看该作者

    为什么每次循环的时候总是调用第10列的数据啊?

    我希望每次循环的时候调用的都是不同列的数据
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-7-13 15:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    14#
    发表于 2007-7-20 10:50:16 | 只看该作者

    回复 #13 Dorpnight 的帖子

    Browser("").Page("").WebEdit("contentName").Set DataTable(1,LocaSheet)
    按照你现在的脚本,你每次都在调用第一列的数据

    给你个参考的:
    Dim filePath
    filePath="c:\login.xls"
    datatable.Importsheet  filepath,1,2
    ' DataTable.ImportSheet(FileName, SheetSource, SheetDest)
    ' 1为Excel 中的第一张 Sheet
    ' 2 为 DataTable 中的第二张,暨Action1

    ''统计DataTable 中的Sheet数
    ''msgbox datatable.GetSheetCount

    ''统计Sheet中的数据行数
    'msgbox datatable.GetSheet ("Action2").GetRowCount

    ''跨action使用别人家的dataTable,使用数字标记行,列更加灵活
    ''datatable.GetSheet ("Action2").SetCurrentRow(3)
    ''msgbox  DataTable("B",  3)
    ''msgbox  DataTable("B", ("Action2"))

    datatable.LocalSheet.AddParameter "testlog",""
    c=datatable.LocalSheet.getrowcount
    'msgbox c
    datatable.SetCurrentRow 1
    For i=1 to c

            systemutil.Run "c:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe"
            Dialog("Login").WinEdit("Agent Name:").Set DataTable("username", dtLocalSheet)
            Dialog("Login").WinEdit("Agent Name:").Type  micTab
            Dialog("Login").WinEdit("Password:").Set DataTable("password", dtLocalSheet)
            Dialog("Login").WinButton("OK").Click

           
            datatable("testlog",dtLocalSheet)="第" & i &"次"

           
            Window("Flight Reservation").WinMenu("Menu").Select "File;Exit"
            datatable.LocalSheet.SetNextRow()
    Next

    ' 导出dataTable 中的第2张Sheet "Action1", 标记从1开始,1 为 Global
    datatable.ExportSheet filepath,2

    msgbox datatable.GetSheetCount
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
     楼主| 发表于 2007-7-23 15:41:30 | 只看该作者

    回复 #14 rivermen 的帖子

    谢谢rivermen,用你的方法是过了,还是一样只能取一行值,不能循环读取
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-10-31 11:32
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    16#
    发表于 2008-12-10 14:17:28 | 只看该作者
    原帖由 Dorpnight 于 2007-7-23 15:41 发表
    谢谢rivermen,用你的方法是过了,还是一样只能取一行值,不能循环读取

    循环读取靠自己写函数  if  for  等等
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-13 17:19 , Processed in 0.093374 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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