找回密码
 加入
搜索
查看: 3984|回复: 5

[AU3基础] 同时打开两个以上excel表,WinActivate()不能准确激活想要的表,怎么办?

  [复制链接]
发表于 2013-5-26 01:17:36 | 显示全部楼层 |阅读模式
我同时打开两个EXCEL表,AAA.XLS和BBB.XLS,用下面的语句
WinActivate("AAA.xls", "")
Send("123455")
Sleep(1000)
出现的结果不稳定,有时候是在AAA.XLS文件中输入"123455",有时候是在BBB.XLS文件中输入.多次测试的结果是:该语句不能准确定位到AAA.XLS,哪个XLS文件打开得晚,则在哪个文件中运行.

但如果是同时打开两个TXT表,比如CCC.TXT 和 DDD.TXT,却可以准备进入到CCC.XLS中
WinActivate("ccc.xls", "")
Send("123455")
请大师帮忙看一看,是什么原因. 因为工作需要,我必须同时打开至少两个工作簿
发表于 2013-5-26 08:58:13 | 显示全部楼层
是标题问题,还是OFFICE版本的缘故? 我测试了十来次,都能激活相对应的表, office2010, 标题用工具获取的.
WinActivate('Microsoft Excel - aaa.xlsx')
Send('1234')
 楼主| 发表于 2013-5-26 13:36:16 | 显示全部楼层
我的机子系统是WIN7,用的OFFICE2007,试过多次,不行。看到USER3000的回复后,换了一台WINXP的机子,EXCEL2003,结果还是不行。如果打开的两个以上EXCEL工作簿中有AAA.XLS,那么程序只认最后打开的那个EXCEL工作簿,如果没有,就直接把SEND语句中的字符输入在编辑器里了。
发表于 2013-5-26 15:47:33 | 显示全部楼层
为何不用EXCEL 的写功能呢?
$Oexcel.activesheet.range("a1").value="1234"
发表于 2013-5-26 16:01:59 | 显示全部楼层
$excel=ObjGet("","excel.application")
If IsObj($excel) Then
        $excel.workbooks("AAA.XLS").activesheet.range("a1").value="OK"
EndIf
可以这样测试一下
发表于 2013-5-26 17:39:21 | 显示全部楼层
个人感觉用excel相关函数操作Excel的准确性好得多,可能你对这方面还不太熟悉,慢慢学吧。
至于如果一定要激活相应的窗口的话,我觉得你还是用工具再探测一次窗口标题比较好,一般Excel窗口的标题名称是以Microsoft Excel再加文件名的,当然你也可以使用WinList获取窗口列表。给个示例:

#include<Excel.au3>
#include<array.au3>

$oExcel1=_ExcelBookOpen(@ScriptDir&"\AAA.XLS")
$oExcel2=_ExcelBookOpen(@ScriptDir&"\BBB.XLS")

$arr=WinList("Microsoft Excel")

_ArrayDisplay($arr,"Excel窗口列表");将获取到的窗口以数组方式显示出来
TrayTip('提示','下面将循环激活AAA.xls和BBB.xls各10次',0)
For $i=0 To 19
        WinActivate($arr[Mod($i,2)+1][0])
        Sleep(1000)
Next
TrayTip('提示','清空提示',0)

_ExcelBookClose($oExcel1)
_ExcelBookClose($oExcel2)

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-18 13:00 , Processed in 0.101758 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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