曾经的最美 发表于 2010-9-2 19:57:28

如何循环读取excel中不同列数的值

Excel中有10行数据,但10行中的列数不同,如何循环读取Excel中的值

feiyunkai 发表于 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列数据
                              Ifdata="" 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 编辑 ]

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

sterson 发表于 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 <> 0Then
                        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
页: [1]
查看完整版本: 如何循环读取excel中不同列数的值