EXCEL对象-用QTP实现EXCEL数据比对
在本篇文章中,我们将讨论如何使用QTP实现EXCEL数据比对。首先,我们需要了解EXCEL对象的结构。EXCEL对象可以分为三个级别:一级为进程级的oExcelobj,二级为工作薄workbooks,三级为工作表worksheets。我们可以使用CreateObject("Excel.Application")创建EXCEL对象,然后使用workbooks.open()方法打开工作薄,并使用worksheets.count属性获取工作表的数量。
在需求分析中,我们发现TRAS和BI中的相同的分析表需要保持数据一致。这些分析表有相同点和不同点。相同点包括多个分析表可以导出成一个EXCEL,TRAS导出的EXCEL中的sheet名称和BI导出的EXCEL中的sheet名称的前几位非汉字字符串相同,表样相同。不同点包括BI导出的EXCEL不会导出隐藏的行列,TRAS导出的EXCEL会导出隐藏列,TRAS和BI中导出EXCLE相应表元的行列号不相同,TRAS导出的EXCLE其中会把“注:”导出到合并表元,而BI中是最后2行贴一个标签。
为了解决这些问题,我们可以使用QTP实现EXCEL数据比对。我们将TRAS导出的EXCLE作为标准数据,然后遍历TRAS导出的EXCEL中的sheet,在BI导出的EXCEL中查找相应的sheet,调用CompareExcel函数对两个sheet作比较。CompareExcel函数的思路包括查找出两个sheet中为数字表元的起始行列号,除去表尾不是数据区域的行数,求出实际的数据区域的行数,如果行数一致,则比较,否则不比较该sheet。遍历TRAS中当前sheet的所有列,如果TRAS中的sheet当前列不是隐藏的,求出BI中的sheet的相应列的列号,遍历TRAS当前sheet的行,找到BI相应sheet的相应行数,比较两个表元的值。如果TRAS中的sheet当前列是隐藏的,则不比较当前列,继续遍历查看下一列是否隐藏。最后,将不一致的表元标记为红色,导出有问题的excel。
在不足之处中,我们发现了几点需要改进的地方。比如,比较的sheet有数据不一致时,导出的EXCEL应该只导出有问题的sheet,但是现在会把所有的sheet都导出来。在导出EXCEL时,有时会把BI的表导出来,可能是因为BI表该sheet的列数比TRAS表该sheet的列数要多,这个要在脚本里处理一下。除去TRAS导出的sheet中表尾不是数据区域的行数时,只是通过查找“注”字,这样不能适合所有的情况,有些情况是表尾有两行,还有一行是页码。
使用QTP实现EXCEL数据比对可以解决TRAS和BI中的相同的分析表数据不一致的问题。但是,我们需要注意到一些不足之处,并对脚本进行改进,以提高脚本的鲁棒性和可靠性。