找回密码
 加入
搜索
楼主: SHINE

[AU3基础] 【已解决】求教---快速查找excel中指定字符串

 火.. [复制链接]
发表于 2011-9-1 01:25:17 | 显示全部楼层
不错 mark 有空学习下
 楼主| 发表于 2011-9-1 21:36:01 | 显示全部楼层
这个太高深了~~~过段时间再向各位讨教吧~~呵呵呵,先讨教下下面这个问题吧~

$oExcelApp=ObjGet("","excel.application")这句,如果我同时打开了1.xls和2.xls(是手动打开的),但是我只想对1.xls操作,需要怎么写呢?谢谢~~
发表于 2011-9-1 21:49:02 | 显示全部楼层
$o_Workbook1=$oExcelApp.workbooks("1.xls")
然后对$o_Workbook1操作即可。
 楼主| 发表于 2011-9-2 21:35:56 | 显示全部楼层
问题解决了一个,又发现一个,唉~~
今天试到一个奇怪的问题-------------用下面这段程式在excel中查找字符串,excel中有很多合并了的单元格(被查的字符也在此合并的单元格内):
1.如果该字符串在excel中出现了2次以上,则程式正常执行
2.如果该字符串在excel中仅出现了1次,则提示 Until $oR.address=$oRng.address不能被执行。试了下,发现是$oR=.usedrange.findnext($oR)出的问题,.usedrange.findnext($oR)找不到。
3.如果是在普通excel中(没有合并项)中查找,则不会出现以上问题

不懂为什么会这样~~
Func searchcell($sFindValue)
    With $oExcel
                $oRng=.usedrange.find($sFindValue)
                If IsObj($oRng) Then
                        $oR=$oRng
                        Do
                                MsgBox(0,"GetColor",$oR.interior.color)
                                $oR=.usedrange.findnext($oR)
                        Until $oR.address=$oRng.address
                EndIf
        EndWith
MsgBox(0,"END","END")
EndFunc
发表于 2011-9-3 18:45:45 | 显示全部楼层
这个感觉挺有用的
发表于 2011-9-3 20:42:52 | 显示全部楼层
回复 15# kevinch
看出来了,你是个高人,还是个热心人,有你是AU3论坛的福气!
发表于 2011-9-3 21:17:35 | 显示全部楼层
回复 21# xms77
我是吹水的高人,au3学得很菜的。
发表于 2011-9-3 21:21:27 | 显示全部楼层
回复 19# SHINE
在excel中,findnext默认会从指定位置开始一直向后找,当找不到时会回到开始继续找,这样就会形成最开始找到并记住的位置与现在位置一样,从而达到退出条件成立,你说的情况我似乎没遇到过,对于合并单元格是不会影响到find的,因为find找到的是合并区域左上角单元格的位置。
 楼主| 发表于 2011-9-3 21:28:45 | 显示全部楼层
高手都喜欢谦虚的哈,呵呵
发表于 2011-9-4 01:24:12 | 显示全部楼层
向你学习致敬。
 楼主| 发表于 2011-9-4 08:30:05 | 显示全部楼层
回复 23# kevinch

附件是试到的情况,如果被查询的字符串不在合并单元格里面,看起来就没问题,可是如果在的话,就报错,如附件图片~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-9-4 10:09:24 | 显示全部楼层
虽然不知道是怎么一回事,不过还是用kevinch在其他帖子中提到的,将合并项解开的方式把这个问题给绕过去了~~谢谢kevinch~~
嗯,不过还是希望找一个好的解决方式~~期待中~~
Func searchcell($sFindValue)
    With $oExcel
                $oRng=.usedrange.find($sFindValue)
                If IsObj($oRng) Then
                        $oR=$oRng
                       Do
                                                If $oR.mergecells=True Then
                                                         $oR.select
                                                         $oR.parent.parent.parent.selection.unmerge
                                                         $oR.parent.parent.parent.selection.cells.value=$oR.value
                                                 EndIf
                                                 
                                                  $adress=$oR.offset(1,0).address;在我所需要操作的excel里面,不会出现上下两个连续单元格的值一样的情况,解组合之后也只需要其中一个
                                                                
                                                        MsgBox(0,"GetColor",$oExcel.name&@TAB&$oR.address&@TAB&$oRng.address)
                                                        $oR=.usedrange.findnext($oR)
                                                                
                                                        If $oR.offset.address=$adress Then
                                                           $oR=.usedrange.findnext($oR)
                                                        EndIf
                                                           
                        Until $oR.address=$oRng.address
                EndIf
        EndWith
EndFunc
发表于 2011-9-4 10:10:15 | 显示全部楼层
Func searchcell($sFindValue)
        With $oExcel
                $oRng = .usedrange.find($sFindValue)
                If IsObj($oRng) Then
                        $oR = $oRng
                        Do
                                MsgBox(0, "GetColor", $oExcel.name & @TAB & $oR.address & @TAB & $oRng.address)
                                $oR = .usedrange.findnext($oR)
                                If Not IsObj($oR) Then ExitLoop
                        Until $oR.address = $oRng.address
                EndIf
        EndWith
EndFunc   ;==>searchcell
确实与vba有差别,要多加个判断。
 楼主| 发表于 2011-9-4 10:22:27 | 显示全部楼层
谢谢kevinch ! 这样好用多了~~
If Not IsObj($oR) Then ExitLoop
我之前用msgbox看$oR=.usedrange.findnext($oR)的值,看到是空,但是不知道要用什么语句来判断~~
发表于 2012-11-12 16:27:56 | 显示全部楼层
追问高手:找到一个结果后,如何操作该行?我想要的是删除这一行或选定这一行复制到另一个表中
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-18 11:23 , Processed in 0.226004 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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