如何循环读取excel中不同列数的值
Excel中有10行数据,但10行中的列数不同,如何循环读取Excel中的值代码如下
'依次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 编辑 ] '也可以不导入,直接打开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 给你一个完整的例子,是从我的测试框架里抽取出来的,希望对你有帮助:
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]