1、用QTP实现EXCEL 数据比对,2,需求分析,本次总局升级,要求TRAS和BI中的相同的分析表,数据保持一致;这些分析表有如下相同点和不同点;相同点:1. 多个分析表可以导出成一个EXCEL,即一个分析表为EXCEL中的一个sheet;2. TRAS导出的EXCEL中的sheet名称和BI导出的EXCEL中的sheet名称的前几位非汉字字符串相同;3. 表样相同;(少数BI的分析表会多出某些列)不同点:1. BI导出的EXCEL不会导出隐藏的行列,TRAS导出的EXCEL会导出隐藏列;2. TRAS和BI中导出EXCLE相应表元的行列号不相同;3. TRAS导出的EXCLE,其中会把“注:”
2、导出到合并表元,而BI中是最后2行贴一 个标签;(如:YB3表),3,解决方法,将TRAS导出的EXCLE作为标准数据,遍历TRAS导出的EXCEL中的sheet,在 BI导出的EXCEL中查找相应的sheet,调用CompareExcel函数对两个sheet作比 较;以下是CompareExcel函数的思路: (1)查找出两个sheet中为数字表元的起始行列号; (2)除去表尾不是数据区域的行数,求出实际的数据区域的行数; (3)如果行数一致,则比较,否则不比较该sheet; (4)在比较两sheet时,比较的是两个sheet的实际的数据区域;遍历TRAS中当前sheet的所有列:1)如果T
3、RAS中的sheet当前列不是隐藏的,求出BI中的sheet的相应列的列号,遍历TRAS当前sheet的行,找到BI相应sheet的相应行数,比较两个表元的值;2)如果TRAS中的sheet当前列是隐藏的,则不比较当前列,继续遍历查看下一列是否隐藏; (5)将不一致的表元标记为红色; (6)导出有问题的excel;,4,不足之处,比较的sheet有数据不一致时,导出的EXCEL应该只导出有问题的sheet,但是现在会把所有的sheet都导出来;在导出EXCEL时,有时会把BI的表导出来,可能是因为BI表该sheet的列数比TRAS表该sheet的列数要多,这个要在脚本里处理一下;除去TRAS导
4、出的sheet中表尾不是数据区域的行数时,只是通过查找“注”字,这样不能适合所有的情况,有些情况是表尾有两行,还有一行是页码;,5,EXCEL对象,Dim oExcelobj,osrcExcel,odisExcel Set oExcelobj=CreateObject(“Excel.Application“) oExcelobj.visible=false Set osrcExcel=oExcelobj.workbooks.open(srcPath) srcSheetCount=osrcExcel.worksheets.count Set odisExcel=oExcelobj.workboo
5、ks.open(disPath) disSheetCount=odisExcel.worksheets.count Excel对象有三个级别: 一级为:oExcelobj(进程级) 二级为:workbooks(工作薄) 三级为:worksheets(工作表),6,知识点,VBS控制Excel常见方法首先创建 Excel 对象: oExcel = CreateObject( “Excel.Application“ )1) 显示当前窗口: oExcel.Visible = True 2) 更改 Excel 标题栏: oExcel.Caption = “应用程序调用 Microsoft Excel“
6、 3) 添加新工作簿: oExcel.WorkBooks.Add 4) 打开已存在的工作簿: oExcel.WorkBooks.Open( “C:ExcelDemo.xls“ ) 5) 设置第2个工作表为活动工作表: oExcel.WorkSheets(2).Activate 或 oExcel.WorksSheets( “Sheet2“ ).Activate 6) 给单元格赋值: oExcel.Cells(1,4).Value = “第一行第四列“ 7) 设置指定列的宽度(单位:字符个数),以第一列为例: oExcel.ActiveSheet.Columns(1).ColumnWidth =
7、5,7,8) 设置指定行的高度(单位:磅)(1磅0.035厘米),以第二行为例: oExcel.ActiveSheet.Rows(2).RowHeight = 1/0.035 1厘米 9) 在第8行之前插入分页符: oExcel.WorkSheets(1).Rows(8).PageBreak = 1 10) 在第8列之前删除分页符: oExcel.ActiveSheet.Columns(4).PageBreak = 0 11) 指定边框线宽度: oExcel.ActiveSheet.Range( “B3:D4“ ).Borders(2).Weight = 3 1-左 2-右 3-顶 4-底 5
8、-斜( ) 6-斜( / ) 12) 清除第一行第四列单元格公式: oExcel.ActiveSheet.Cells(1,4).ClearContents 13) 设置第一行字体属性: oExcel.ActiveSheet.Rows(1).Font.Name = “隶书“ oExcel.ActiveSheet.Rows(1).Font.Color = clBlue oExcel.ActiveSheet.Rows(1).Font.Bold = True oExcel.ActiveSheet.Rows(1).Font.UnderLine = True,8,14) 进行页面设置:a.页眉: oExc
9、el.ActiveSheet.PageSetup.CenterHeader = “报表演示“ b.页脚: oExcel.ActiveSheet.PageSetup.CenterFooter = “第&P页“ c.页眉到顶端边距2cm: oExcel.ActiveSheet.PageSetup.HeaderMargin = 2/0.035 d.页脚到底端边距3cm: oExcel.ActiveSheet.PageSetup.HeaderMargin = 3/0.035 e.顶边距2cm: oExcel.ActiveSheet.PageSetup.TopMargin = 2/0.035 f.底边距
10、2cm: oExcel.ActiveSheet.PageSetup.BottomMargin = 2/0.035 g.左边距2cm: oExcel.ActiveSheet.PageSetup.LeftMargin = 2/0.035 h.右边距2cm: oExcel.ActiveSheet.PageSetup.RightMargin = 2/0.035 i.页面水平居中: oExcel.ActiveSheet.PageSetup.CenterHorizontally = 2/0.035 j.页面垂直居中: oExcel.ActiveSheet.PageSetup.CenterVerticall
11、y = 2/0.035 k.打印单元格网线: oExcel.ActiveSheet.PageSetup.PrintGridLines = True,9,15) 拷贝操作: a.拷贝整个工作表: oExcel.ActiveSheet.Used.Range.Copy b.拷贝指定区域: oExcel.ActiveSheet.Range( “A1:E2“ ).Copy c.从A1位置开始粘贴: oExcel.ActiveSheet.Range.( “A1“ ).PasteSpecial d.从文件尾部开始粘贴: oExcel.ActiveSheet.Range.PasteSpecial 16) 插入
12、一行或一列: a. oExcel.ActiveSheet.Rows(2).Insert b. oExcel.ActiveSheet.Columns(1).Insert 17) 删除一行或一列: a. oExcel.ActiveSheet.Rows(2).Delete b. oExcel.ActiveSheet.Columns(1).Delete 18) 打印预览工作表: oExcel.ActiveSheet.PrintPreview 19) 打印输出工作表: oExcel.ActiveSheet.PrintOut 20) 工作表保存: if not oExcel.ActiveWorkBook.Saved then oExcel.ActiveSheet.PrintPreview,10,21) 工作表另存为: oExcel.SaveAs( “C:ExcelDemo1.xls“ ) 22) 放弃存盘: oExcel.ActiveWorkBook.Saved = True 23) 关闭工作簿: oExcel.WorkBooks.Close 24) 退出 Excel: oExcel.Quit,11,脚本已添加注释192.168.1.21测试部门共享文件自动化测试CompareExcel,