51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2684|回复: 17
打印 上一主题 下一主题

[原创] 请教一个import excel的问题。

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2005-11-16 17:01:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
QTP 新手在此,请教大家一个和import excel有关的问题。

我按照tutorial建立的一个test,然后再参数化前使datatable从excel中读入数据。具体代码如下:

DataTable.Import ("C:\flights.xls")
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("departure", dtGlobalSheet)

虽然运行时候会重复执行,次数也等于excel中数据的行数,可是发现每次读取的都是excel中的第一行数据,为什么不是每次读取新的一行呢?是不是还要添加什么代码?

请大家指教。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2005-11-16 17:53:35 | 只看该作者
没有人回帖阿,自己顶一下。。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2005-11-16 18:10:47 | 只看该作者
DataTable.Import ("C:\flights.xls")
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("departure", dtGlobalSheet)
你的数据库指针没有移动,你后面加下面这一句就可以了!
datatable.SetNextRow
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2005-11-16 18:24:24 | 只看该作者
如果从代码的角度上说,
循环执行嘛,就要出现
for i=1 to n
...
DataTable.GetSheet("MySheet").SetNextRow
...
next
等等这样的语句。其中,SetNextRow就是让QTP去读取下一行数据的。

但是从你的描述上面来看,你显然没有用这种代码的方式,而应该用的是keyword view做的参数化。

而且是按照手册做的。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2005-11-16 18:27:38 | 只看该作者
问题在于,如果你是按照手册做的,一丝不苟的,那不应该有错啊。即便有错,也可以在论坛上找到已有答案啊。

所以,QA_BAY,我想它的问题不是加布加指针的问题。呵呵。而是sheet和action是否对应的问题。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2005-11-17 09:27:09 | 只看该作者
dtGlobalSheet
他放的是全局,全局每次都会执行,指针会自动向下指,
lovetest6 说得对,这个是我没有细看的!
可能是sheet问题吧.
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2005-11-17 09:51:52 | 只看该作者
等它把它具体的操作步骤贴出来,再给他分析吧。

另外,看来以后应该有个版规,告诉大家提问题需要提供什么东西。呵呵。要不简直象探案。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2005-11-17 10:04:28 | 只看该作者
谢谢指教,我想lovetest6说的对,我用了循环语句
Dim n = 0
for i=1 to n
DataTable.GetSheet("MySheet").SetNextRow
next
n = n+1
可是n并不能像C语言里那样设为静态的,故而每次都是0。所以每次实际上都没有移动指针。

我的确是照着手册做的,在对fromPort这个值参数化后,一切运行正常。可以从datatable里读取每行的值。
然后我就添加了DataTable.Import ("C:\flights.xls")
希望从excel里面导入数据到datatable里,而实际上也是成功的。
只是这个时候参数化就没有从这个导入的datatable里循环读取值,而是每次都读第一行的值。

刚才手工加循环也不对,还是没有得到正确结果。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2005-11-17 13:35:44 | 只看该作者
首先,n不能等于零啊,呵呵,应该等于记录的条数。

其次,
The imported table replaces all data in the existing run-time Data Table (including all data sheets).

The following example uses the Import method to import the flights.xls table to the run-time Data Table.

DataTable.Import ("C:\flights.xls")


run-time Data Table 各位应该清楚。

也就是说,在运行之前,Data Table 是空的。

前面说的"每次都会执行,指针会自动向下指"不是针对run-time Data Table的。

所以按说,楼主的例子应该只执行一次。但是不知道做了别的什么,所以导致运行了很多次,呵呵。

[ 本帖最后由 lovetest6 于 2005-11-17 13:40 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2005-11-17 14:56:32 | 只看该作者
综合了几位大侠的意见,我对自己的教本进行了测试,实现了楼主所要的功能。你可以看一下我的例子代码:
Datatable.Import("D:\temp\Tests\maintest\input.xls")
For i = 1 to 3
        Browser("业务平台").Page("业务平台_4").WebEdit("contentTitle").Set DataTable("contentName_Text", dtLocalSheet)
        Browser("业务平台").Page("业务平台_4").WebEdit("contentLength").Set DataTable("contentLength_Text", dtLocalSheet)
        Browser("业务平台").Page("业务平台_4").WebEdit("content").Set DataTable("content_Text", dtLocalSheet)
        Browser("业务平台").Page("业务平台_4").WebButton("增加").Click
        Datatable.GetSheet("Copy of Action1_addContent").SetNextRow
Next
上边向3个text中输入数据,可以直接用Datatable.SetNextRow等于你加上sheet的名字;这样加上循环后可以实现所有3组值的输入,但是它做了3遍添加3组值的操作,仔细一看原来是在复用action的设置为allIterators,改为oneIterator即可
回复 支持 反对

使用道具 举报

该用户从未签到

11#
 楼主| 发表于 2005-11-17 15:32:22 | 只看该作者
非常感谢大家的帮助,尤其是lovetest6斑竹。
我先前表达的问题可能不是很清楚,
因为我运行程序后会出现n个循环,我也很奇怪参数化后为再import excel,什么会按照excel表里的行数循环多次,却不能读取新的excel一行数据,所以我先是在程序访问datatable前加了这段话:

...
Dim n = 0
for i=1 to n
DataTable.GetSheet("MySheet").SetNextRow
next
n = n+1
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("departure", dtGlobalSheet)
...

当然结果是不行。

随后和lovetest6交流了一下,我重新录制了程序。然后在程序的最外侧加上了循环:

Count = 3
DataTable.Import ("C:\flights.xls")
For i=1 To Count
...
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("departure", dtGlobalSheet)
...
DataTable.GetSheet("Global").SetNextRow
Next

这样的结果是正确的!

另外,lovetest6说:“所以按说,楼主的例子应该只执行一次。但是不知道做了别的什么,所以导致运行了很多次,呵呵。”
真的是这样的,按说只应该运行一次的,后来我用重新录制的就没有重复执行的问题,估计是原先的录制里加了很多CheckPoint的缘故,不知道哪个CheckPoint导致的问题。

谢谢大家指教,现在这个问题解决了。:)
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2005-11-17 17:22:11 | 只看该作者
那如果不加FOR 循环呢?
也是运行正确的吧!
因为你放在GLOBAL中!有多少个数据就运行多少次吧!所以应该不用加FOR
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2005-11-21 16:05:52 | 只看该作者
运行起来,不加for就不能得到正确结果啊。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-4-13 13:06:45 | 只看该作者

LOCAL SHEET无法导入

大家好,我是新手,最近学QTP遇到问题了,就是我在导入excel表的时候,在语句中写了这么一句datatable.import("c:\a.xls")但是我选择要参数化的表是LOCAL SHEET,然而他总是导入到global那张表里,请问有什么方法可以解决,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2007-4-13 13:26:50 | 只看该作者
我也遇到和楼主一样的问题了,怎么办啊sdlkfj9 大家帮帮忙啊

datatable.Import("C:\a.xls")

Browser("网易通行证").Page("网易通行证").WebEdit("username").Set DataTable("p_username", dtGlobalSheet)
Browser("网易通行证").Page("网易通行证").WebButton("登 录").Click
Browser("网易通行证").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
datatable.GetSheet("Global").SetNextRow
这段代码啊,他只不断的重复输入第一行,而且执行完了马上又重新导入数据,怎么解决啊,谢谢各位大侠了
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2007-4-13 13:31:48 | 只看该作者
我按照楼主的方法做了,但是执行了,行数*行数的次数啊,也不对了sdlkfj8
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2007-4-13 13:51:33 | 只看该作者
斑竹在吗,能不能帮忙解决一下,谢谢了
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2007-4-13 16:35:08 | 只看该作者
已经解决了,谢谢各位了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-9-20 18:38 , Processed in 0.072055 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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