51Testing软件测试论坛

标题: 如何在确定Datatable的循环次数 [打印本页]

作者: 金城月    时间: 2007-5-11 20:07
标题: 如何在确定Datatable的循环次数
这几天我一直在忙着做QTP的脚本,今天遇到了一个棘手的问题,弄了一天也没有好办法解决。
我要做的工作是将测试报告作为附件在执行完自动化测试脚本之后,发送到程序员的邮箱里。
我大概是这么写的:
               '先将*.xls文件导入
               DataTable.ImportSheet "C:\***\****l.xls","MailTable","MailTable"

               '从文件读取发送人列表——To
        nextRow = empty                '清空值,以便后面使用
        Do While DataTable.RawValue(1,"MailTable") <> Empty
                nextRow = DataTable.RawValue(1,"MailTable")
                mailTo = mailTo + nextRow  +  ";"
                DataTable.SetNextRow
        Loop
        mailTo = left( mailTo,len(mailTo) - 1 )                '去除最后的分号
        DataTable.SetCurrentRow(1)

                '从文件读取抄送人列表——CC
        nextRow = empty                '清空值,以便后面使用
        Do While DataTable.RawValue(2,"MailTable") <> Empty
                nextRow = DataTable.RawValue(2,"MailTable")
                mailCC = mailCC + nextRow  +  ";"
                DataTable.SetNextRow
        Loop
        mailCC = left( mailCC,len(mailCC) - 1 )                '去除最后的分号
        DataTable.SetCurrentRow(1)
…………………………

但是如果此时*xls文件中,第二列的行数是该表单中最长的一行,程序根据循环走到第二列最后一行时,本应该读到“DataTable.SetNextRow”这一行的时候继续向下读,读到的值是空值,就能退出循环了,但是,程序却没有这样做,而是读到“DataTable.SetNextRow”这一行的时候,返回到了该列的第一行,结果就陷入了死循环中。
各位同仁是否也遇到过同样的问题,因该如何解决呢?
我只想能够把每一列的内容读出来,不落下任何一行的信息,也不多读取多余的信息。

[ 本帖最后由 金城月 于 2007-5-11 20:09 编辑 ]
作者: stone821021    时间: 2007-5-12 08:54
谈谈我的看法:
我觉得你应该去看看SetNextRow的说明,QTP help里面是这样说的."If the current row is the last row in the Data Table, applying this method sets the first row in the Data Table as the new current row. " 这也就是为什么你的程序会进入死循环的原因吧.因为你的do 条件永远都为真了!
即然*.xls文件你有了,为什么不用DataTable.GetSheet("MySheet").GetRowCount 得到该sheet的最长列的行数,做一个for 循环呢?

[ 本帖最后由 stone821021 于 2007-5-12 09:09 编辑 ]
作者: 金城月    时间: 2007-5-12 12:42
感谢2楼的朋友,问题已经解决了,呵呵。for循环到最大列数,已经可以实现功能了。
作者: stone821021    时间: 2007-5-12 15:46
sdlkfj3 不用客气,能运行了就好!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2