【问题标题】:Parse clipboard without Loop [Autohotkey]不带循环解析剪贴板 [Autohotkey]
【发布时间】:2018-06-15 21:51:12
【问题描述】:

这里是 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)。一次只能打开其中一份报告。

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

【问题讨论】:

  • 脚本如何知道何时下降或横盘?我不认为循环是你的问题,它正在弄清楚如何检测脚本应该如何导航工作表。
  • @Sidola 我在想我可以有几个脚本,每个模式一个(如上面的示例)。
  • 假设您确切知道您正在处理多少行,您可以使用StrSplit() 并将其转换为一个数组,然后在不同的行访问该数组。

标签: autohotkey


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 2017-10-14
    • 2019-06-06
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多