51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 8943|回复: 9
打印 上一主题 下一主题

[原创] excel两列比较的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-7-14 16:20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用QTP录制等操作后把结果写到了excel文件里的两列内,A列的第一个格内容为a,b,c,B列的第一个格的内容为c,a,b
我现在需要写什么样的程序让QTP判断这两列的内容是一样的(A列和B列内容是一样,只是排列顺序不一样)
如果A列是a,b,c,d,B列是a,b,c,那么A和B列的值就不等了。

请高手指教
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-7-14 16:46:24 | 只看该作者
split每格内容,然后循环取B中的Iitem值,在A中查找比对(for each就可以了)
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-7-14 17:08:47 | 只看该作者
楼上的方法,内容多的话会比较慢。
我的办法:遍历EXCEL的所有行,把第一列的内容取出来,SORT以后组成字符串A;第二列内容也是SORT以后组成字符串B,然后比较两个字符串就成了。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-7-14 19:07:25 | 只看该作者
测试脚本要简单的好,速度倒是其次的。
而且每格的数据流又不大,速度差不了多少。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2008-7-15 12:37:07 | 只看该作者
在写的时候又遇到一问题,就是qtp不能取到除Global外的Sheet的最大行数之类的操作

不知大家有没什么好的办法,因为如果把取到的值放到Global里会很乱
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2008-7-15 14:50:52 | 只看该作者
学习来啦
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-7-15 17:01:52 | 只看该作者
该脚本都已搞定,谢谢各位提供的建议
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2008-7-15 17:18:42 | 只看该作者
建议你贴出来供其他有需要的朋友参考参考,
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2008-7-16 10:06:26 | 只看该作者
把最主要实现的地方贴出来:
'得到GenVal表单的最大行数
rowcount = DataTable.GetSheet("GenVal").GetRowCount
'操作Excel对象
Set xlApp= CreateObject("Excel.Application")
Set wkBook= xlApp.Workbooks.Open("C:\sg.xls")
Set wkSheet= wkBook.Worksheets("GenVal")
'从本地excel文件的第二行开始循环到第十一行
For i=2 to rowcount+1
'将excel里的第i行第2列数据然后转换成字符再去除两边空格后通过字符内部空格进行分割成数组
MyArray1=split(trim(CStr(wkSheet.Cells(i, 2)))," ")
MyArray2=split(trim(CStr(wkSheet.Cells(i,3)))," ")
s=0'统计,如各数组内元素匹配,则s加1,不匹配则不加1,最后通过s与数组最大下标比较,相同则说明两个数组元素都匹配
'判断两个数组哪个大,根据下标大的数组和下标小的数组进行循环比较
If  Ubound(MyArray1)>=Ubound(MyArray2) Then
  For j=0 to Ubound(MyArray1)
   For k=0 to Ubound(MyArray2)
    '去除括号及括号内部的内容
    If left(MyArray1(j),instr(1,MyArray1(j),"(")-1)=left(MyArray2(k),instr(1,MyArray2(k),"(")-1) Then
     s=s+1
     Exit for
    End If
            Next
  Next
  If s<>Ubound(MyArray1)+1 Then
   print trim(CStr(wkSheet.Cells(i, 1)))
  End If
Else
  For j=0 to Ubound(MyArray2)
   For k=0 to Ubound(MyArray1)
    If left(MyArray2(j),instr(1,MyArray2(j),"(")-1)=left(MyArray1(k),instr(1,MyArray1(k),"(")-1) Then
     s=s+1
     Exit for
    End If
   Next
  Next
  If s<>Ubound(MyArray2)+1 Then
   print trim(CStr(wkSheet.Cells(i, 1)))
  End If
End If
Next
wkBook.Close
xlApp.quit
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2008-7-16 11:40:45 | 只看该作者
使用CELLS这个函数,可以用第几列第几行来弄的~~~
CELLS(行,列)
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-18 03:36 , Processed in 0.081549 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表