您的位置:首页 > 编程语言 > Qt开发

QTP Excle数据比对

2015-06-09 15:17 357 查看

项目上有个UAT的case的checkpoint 需要比较系统里webtable 里跟exported 到excle 文件的数据是否一致。

想想了,传统的方法是将webtable的数据取出来存在另一个excle文件里,然后在异步比较2个excle 文件数据是否相同。

但是这个方法效率太低,想到之前项目上用到利用excel 的内置公式比较数据,并将差异的数据标上不同的颜色。

不多说,上代码:

Sub CompareExcel(strPath,dicData)
Dim oExcel,oWorkbook,oSheet,i,key
Set oExcel=CreateObject("Excel.Application")
On error resume next :err.clear
Set oWorkbook=oExcel.workbooks.open(strPath)
Set oSheet=oWorkbook.sheets(1)
If err.number<>0 Then
err.clear
Exit sub
End If
On error goto 0
oExcel.DisplayAlerts=False
Dim colums:colums=oSheet.usedRange.Columns.Count
Dim rows:rows=oSheet.usedRange.rows.Count
'	Dim end_pos:end_pos=start_pos+dicData.count
Dim countRow:countRow=dicData.count
Dim countCloumn:countCloumn=ubound(dicData(1))+1

'	Dim new_start_pos:new_start_pos=US1567_To_letter(colums+1)
Dim new_start_pos:new_start_pos=rows+2
'	Dim new_end_pos:new_end_pos=US1567_To_letter(colums+countCloumn)
Dim new_end_pos:new_end_pos=US1567_To_letter(countCloumn)

Dim index:index=new_start_pos
for each key in dicData.keys
oSheet.range("A"&index&":"&new_end_pos&index).value=dicData(key)
index=index+1
Next
Dim range1:range1="A2"&":"&US1567_To_letter(colums)&rows
'	Dim range2:range2=new_start_pos&"2"&":"&new_end_pos&(countRow+1)
Dim range2:range2="A"&new_start_pos&":"&new_end_pos&(countRow+new_start_pos-1)

oSheet.range("A"&(new_start_pos-1)).value="From RM WebTable Data:"
'	oSheet.range("A"&(new_start_pos-1)&":"&new_end_pos&(new_start_pos-1)).value="From RM WebTable Data:"
'	oSheet.range("A"&(new_start_pos-1)&":"&new_end_pos&(new_start_pos-1)).mergecells=true

'	oSheet.listobjects.add(1, oSheet.range(range2), false, 1).name = "table1"
'	oSheet.listobjects("table1").tablestyle = "TableStyleMedium16"

oSheet.range(range1).select
oSheet.range(range1).FormatConditions.add 2,,"=A2 <>"&"A"&new_start_pos
oSheet.range(range1).FormatConditions(1).setfirstpriority
oSheet.range(range1).FormatConditions(1).interior.color = 65535
oSheet.range(range1).FormatConditions(1).stopiftrue = false

oSheet.range(range2).select
oSheet.range(range2).FormatConditions.add 2,,"=A2 <> "&"A"&new_start_pos
oSheet.range(range2).FormatConditions(1).setfirstpriority
oSheet.range(range2).FormatConditions(1).interior.color = 65535
oSheet.range(range2).FormatConditions(1).stopiftrue = false

oSheet.range("A1").select
oSheet.cells.entirecolumn.autofit

oWorkbook.save
oWorkbook.Close
Set oSheet=Nothing
Set oWorkbook=Nothing
Set oExcel=nothing
End Sub

 将页面的webtable的每一行数据作为一位数组放在dic 对象里,利用QTP EOM 操作excle文件,将数据一行一行写到 exported 的excle 文件里,动态的插入 FormatConditions。比较数据的过程丢给Excle。

 最后将比较之后的文件以超链接的方式插到QTP的report里。

 

tips:

很奇怪的是网上关于qtp 对excle 读写数据都是cells(1,1).value 这个方法,一个单元格一个单元格的读写数据,这样效率实在太低。

其实有更好的方法:

 

1.可以一行一行的读写数据 eg. worksheet.range("A1":"F1").value 

2.甚至可以一次性操作所有数据 eg.worksheet.usedrange.value 

 

这2个方式读的时候是返回2维数组。写的时候可以1维数组写入。

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: