Dorpnight 发表于 2007-7-19 13:59:58

Excel做数据驱动,调用数据时出错

我想从excel表里读取数据来实现文本框里的数据更新,可是不知为什么在调用数据的时候老是说我参数错误,请指教!

经调试后错误图片如下:

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

Dorpnight 发表于 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

rivermen 发表于 2007-7-19 15:21:36

Set DataTable(ContentName,dtLocalSheet)

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

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


u may try

Dorpnight 发表于 2007-7-19 15:49:53

回复 #3 rivermen 的帖子

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

rivermen 发表于 2007-7-19 16:33:03

"ContentName" 是不是你Datatable的列名呢?
你把DataTable 导入数据后的情况贴出来
ps:导入后适当wait

[ 本帖最后由 rivermen 于 2007-7-19 16:34 编辑 ]

wuzhuayu 发表于 2007-7-19 17:06:45

原帖由 Dorpnight 于 2007-7-19 14:00 发表 http://bbs.51testing.com/images/common/back.gif
下面是代码:

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!

rivermen 发表于 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

ParameterIDVariantIdentifies the parameter (column) of the value to be set/retrieved. Index values begin with 1.
SheetIDVariantOptional. 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.
NewValueStringSets 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"

wuzhuayu 发表于 2007-7-19 17:59:13

楼上的意思是我搞错了?

wuzhuayu 发表于 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

rivermen 发表于 2007-7-19 18:10:45

回复 #9 wuzhuayu 的帖子

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

前面的 i 代表 哪一个列(参数)
后面的 j 代表 哪一个Sheet (GlobalSheet,LocaSheet)

Dorpnight 发表于 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

Dorpnight 发表于 2007-7-20 10:17:35

回复 #11 Dorpnight 的帖子

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

Dorpnight 发表于 2007-7-20 10:36:51

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

我希望每次循环的时候调用的都是不同列的数据

rivermen 发表于 2007-7-20 10:50:16

回复 #13 Dorpnight 的帖子

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

给你个参考的:
Dim filePath
filePath="c:\login.xls"
datatable.Importsheetfilepath,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)
''msgboxDataTable("B",3)
''msgboxDataTable("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:").TypemicTab
        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

Dorpnight 发表于 2007-7-23 15:41:30

回复 #14 rivermen 的帖子

谢谢rivermen,用你的方法是过了,还是一样只能取一行值,不能循环读取

sincor 发表于 2008-12-10 14:17:28

原帖由 Dorpnight 于 2007-7-23 15:41 发表 http://bbs.51testing.com/images/common/back.gif
谢谢rivermen,用你的方法是过了,还是一样只能取一行值,不能循环读取
循环读取靠自己写函数iffor等等
页: [1]
查看完整版本: Excel做数据驱动,调用数据时出错