51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 5148|回复: 3
打印 上一主题 下一主题

[原创] 如何循环读取excel中不同列数的值

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-9-2 19:57:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Excel中有10行数据,但10行中的列数不同,如何循环读取Excel中的值

本帖子中包含更多资源

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

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

使用道具 举报

  • TA的每日心情
    奋斗
    2014-12-18 10:31
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2010-9-3 10:05:00 | 只看该作者

    代码如下

    '依次print当前Action中DataTable的所有数据
    rowcount=DataTable.LocalSheet.GetRowCount '获取当前Action中DataTable的行数
    colcount=DataTable.LocalSheet.GetParameterCount '获取当前Action中DataTable的列数
    For i=1 to colcount
                    For j=1 to rowcount
                                    DataTable.LocalSheet.SetCurrentRow(j)  '指针跳转到指定行
                                    data=DataTable(i,dtLocalSheet) '取当前Action的第j行第i列数据
                                    If  data="" Then
                                                    Exit for
                                    End If
                    print data                                
                    Next
    Next
    '若想获取指定Sheet中数据可将以上代码中所有的DataTable.LocalSheet修改为DataTable.GetSheet(sheetname)  
    '以取Action1数据为例:DataTable.LocalSheet修改为DataTable.GetSheet("Action1")

    [ 本帖最后由 feiyunkai 于 2010-9-3 10:07 编辑 ]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-19 13:26
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]测试小兵

    3#
    发表于 2010-9-3 23:54:43 | 只看该作者
    '也可以不导入,直接打开Excel操作
    '前面要添加验证Excel是否打开的代码或关闭所有Excel的代码
    Dim app,appBook,appSheet
    Set app = CreateObject("Excel.Application")
    Set appBook = app.Workbooks.Open("H:\SKU.xls")
    Set appSheet = appBook.Worksheets(4)

    '假设最多10行,8列
    For i=1 To 10
            For j=1 To 8
                    ExpectValue = appSheet.cells(i,j).value
                    If ExpectValue="" Then
                            '丢弃
                            Exit For        '发现为空,转入下一行取值
                    Else
                            '使用ExpectValue或赋给变量、字典等退出循环后使用
                    End If
            Next       
    Next

    appBook.Close
    Set appBook = Nothing
    Set app = Nothing
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-22 12:50
  • 签到天数: 393 天

    连续签到: 1 天

    [LV.9]测试副司令

    4#
    发表于 2010-9-4 10:20:47 | 只看该作者
    给你一个完整的例子,是从我的测试框架里抽取出来的,希望对你有帮助:
    1,首先写一个读取外部excel的函数
      '函数名称:T_ReadFromExcel
        '函数描述:从外部Excel文件读取数据
        '参数说明:xlsName(类型:字符串,指定读取的excel路径),workTable(类型:字符串,指定读取的工作表)
                     'isAll(类型:布尔,指定读取方式,True:读取全部数据,False:只读取某列的数据),
                             'iColCount(类型:数字,指定读取第几列)
        '函数返回:返回所指定的数据
       ‘作者:联友 (QQ 56329953)
            '更新日期:2008-12-11
            Public Function T_ReadFromExcel(xlsName,workTable,isAll,iColCount)
                    on error resume next
                    dim fso
                    Set fso = CreateObject("Scripting.FileSystemObject")
            If not fso.FileExists(xlsName) Then
                            Dim errMsg
                            errMsg="读取测试用例数据出错" & Chr(13)
                            errMsg=errMsg & "    1.文件名称或路径不正确" & Chr(13)
                            Call T_Report(errMsg)
                            call T_Message(errMsg, true)
                    end if
                    Dim xlApp, xlFile, xlSheet
                    Dim iRowCount, iLoop,iLoop1,numAdd
                    Set xlApp = CreateObject ("Excel.Application")
                    Set xlFile = xlApp.Workbooks.Open (xlsName)
                    Set xlSheet = xlFile.Sheets(workTable)
                    If Err.Number <> 0  Then
                            errMsg="读取测试用例数据出错" & Chr(13)
                            errMsg=errMsg & "    1.数据表名称不正确"
                            Call T_Report(errMsg)
                            call T_Message(errMsg, true)
                    End if
                    iRowCount = xlSheet.usedRange.Rows.Count
                    if isAll=true then                
                            iColCount = xlSheet.usedRange.Columns.Count
                            For iLoop = 2 To iRowCount
                              For iLoop1 = 1 To iColCount
                              numAdd = numAdd &"^"& xlSheet.Cells(iLoop,iLoop1)
                              Next
                            Next
                    else
                            if not isNumeric(iColCount) then iColCount=1
                            For iLoop = 2 To iRowCount
                                    numAdd = numAdd &"^"& xlSheet.Cells(iLoop,iColCount)
                            next
                    end if
                    xlFile.Close
                    xlApp.Quit
                    Set xlSheet = Nothing
                    Set xlFile = Nothing
                    Set xlApp = Nothing
                   
                    T_ReadFromExcel=numAdd
            End Function
    2,在excel中设计测试用例数据,每一行数据以 | 作为结束标识,否则无法知道一行有多少列



    3,在QTP脚本调用数据:
    '初始化测试用例数据
    Dim tmpUser,arrayUser
    Dim testCase
    testCase="e:\TestData\测试数据.xls" '这里是写excel的路径,包括文件名
    if testCase="" then
       bc.T_Report("加载测试用例失败,请检查路径是否正确")
       ExitAction
    end if
    tmpUser=T_ReadFromExcel(testCase,"用户管理",true,0) '这里是写excel的哪个表格(就是哪个sheet),excel里可以有多个表格,对应不同模块的测试数据
    arrayUser=split(tmpUser,"|")

    ‘将数据填写到程序中,楼主可以设计多行数据,这样它会自动取每一行的数据
    for i=0 to ubound(arrayUser)-1
      dim arrayUser2
    '这里是取第一列的第1数据,第二次循环时,就是第一列的第二个数据
      Browser("title:=" & IETitle).WebEdit("name:=userAccount").Set split(arrayUser2(1),"/")(0)
    '这里是取第一列的第2数据,第二次循环时,就是第一列的第2个数据
      Browser("title:=" & IETitle).WebEdit("name:=userName").Set split(arrayUser2(2),"/")(0)
      ......
    next

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-2 18:58 , Processed in 0.066989 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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