wsxjwsxj 发表于 2013-5-26 01:17:36

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

我同时打开两个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")
请大师帮忙看一看,是什么原因. 因为工作需要,我必须同时打开至少两个工作簿

user3000 发表于 2013-5-26 08:58:13

是标题问题,还是OFFICE版本的缘故? 我测试了十来次,都能激活相对应的表, office2010, 标题用工具获取的.WinActivate('Microsoft Excel - aaa.xlsx')
Send('1234')

wsxjwsxj 发表于 2013-5-26 13:36:16

我的机子系统是WIN7,用的OFFICE2007,试过多次,不行。看到USER3000的回复后,换了一台WINXP的机子,EXCEL2003,结果还是不行。如果打开的两个以上EXCEL工作簿中有AAA.XLS,那么程序只认最后打开的那个EXCEL工作簿,如果没有,就直接把SEND语句中的字符输入在编辑器里了。

h20040606 发表于 2013-5-26 15:47:33

为何不用EXCEL 的写功能呢?
$Oexcel.activesheet.range("a1").value="1234"

kevinch 发表于 2013-5-26 16:01:59

$excel=ObjGet("","excel.application")
If IsObj($excel) Then
        $excel.workbooks("AAA.XLS").activesheet.range("a1").value="OK"
EndIf可以这样测试一下

xlj310 发表于 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)
        Sleep(1000)
Next
TrayTip('提示','清空提示',0)

_ExcelBookClose($oExcel1)
_ExcelBookClose($oExcel2)

页: [1]
查看完整版本: 同时打开两个以上excel表,WinActivate()不能准确激活想要的表,怎么办?