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维数组写入。
相关文章推荐
- QTP 依次读取文本中的各行数据
- 导入Excle数据至数据库 “外部表不是预期的格式”错误信息
- .Net读取Excle数据写入到数据库
- 将Excel数据导入QTP Data Table
- 插入数据到excle的指定位置
- 数据导出Excle
- Excle导出数据
- 导出数据到Excle表格的方法详解
- 不一样的课程表,不一样的Excle--用Excle进行设计(10):数据的布局
- .Net导出数据到Excle
- oracle随机读取一条数据以及excle导入数据库
- 比对两个数据库中数据表结构异同
- QTP之WebTable----搜索指定的数据
- 【Excle数据透视】二维数据如何创建数据透视表
- 数据驱动在QTP的运用
- QTP的那些事--在QC中importsheet方式导入excel数据驱动
- 不一样的课程表,不一样的Excle--用Excle进行设计(43):筛选(过滤)所演绎的数据逻辑
- 【Excle数据透视表】如何在Excle中使用数据鼠标拖放
- ②Excle数据批量导入到Oracle数据库中
- 导入excle数据