QTP Excle数据比对

项目上有个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维数组写入。

 

 

 

你可能感兴趣的:(qtp)