没有循环的解析剪贴板[Autohotkey]

时间:2015-06-29 13:06:51

标签: autohotkey

AHK新手在这里。

我有一个包含数据的电子表格,用于填写IE中应用程序中的表单。

也许有更好的方法,但是可以在没有Loop函数的情况下解析剪贴板吗?

我已创建此代码以复制excel中的所选范围并解析剪贴板,将每个值粘贴到列中:

^`::

Send, ^c ; this copies the column in Excel
WinActivate, ahk_exe iexplore.exe ; activate browser
Sleep 30
Loop, parse, clipboard, `n, `r
{
 Send, ^a   
 SendRaw, %A_LoopField%
 Sleep 30
 Send, {down}
 Sleep 30
}
clipboard = 
Return

问题是数据无法始终粘贴到列中。有时,模式会有以下几点:

Send, ^c ; copy the selected data in Excel
WinActivate, ahk_exe iexplore.exe ; activate browser
Sleep 30
;paste first data item
SendInput, {down}{tab}
;paste second data item
SendInput, +{tab}{down}
;paste third data item
SendInput, {down}
;paste fourth data item
SendInput, {down}
;paste fifth data item

另外,有没有办法根据名称开头激活窗口(Excel电子表格)?基本上,我有几个报告(数据来自哪里),例如,从XXX开始,然后有一个识别参考号(例如XYZ 31259875,XYZ 57896547)。这些报告中只有一个会一次开放。

请原谅我的无知,并提前感谢你!

1 个答案:

答案 0 :(得分:1)

也许使用:

ComObjGet()

你可以做的是获取Excel COM对象,然后它就像vba:

 MyWorkbook := ComObjGet("Somepath here")
 row = 0
 column := 1 ;Column A as an example    
 Loop, 50 ;Just an example for the loop
 {
      row:= row + 1
      Cell:= MyWorkbook.Sheets(1).Cells(row, column).text
      WinActivate, ahk_exe iexplore.exe
      ...your other events
  }`

此外,我强烈建议您使用IE的COM对象,这样您就可以使用元素的ID或类似的东西来获取控件。例如:

;Get Pointer to IE
For ie in ComObjCreate("Shell.Application").Windows
 {
    if (ie.LocationName="SomeWindowNameHere") and InStr(ie.FullName,  "iexplore.exe")
    {
        break
    }
 }

最后......

ie.getelementbyid("SomeElementID").value:=Cell