2015-06-29 3 views
0

AHK Новичок здесь.Parse clipboard without Loop [Autohotkey]

У меня есть таблица с данными, которые используются для заполнения форм в приложении в 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). Только один из этих отчетов будет открыт одновременно.

Прошу прощения за мое незнание и благодарю вас заранее!

+0

Как бы сценарий знать, когда идти вниз или вбок? Я не думаю, что цикл является вашей проблемой, он выясняет, как определить, как сценарий должен перемещаться по листу. – Sid

+0

@ Сидола Я думал, что у меня может быть несколько сценариев, по одному для каждого шаблона (например, пример выше). – aLearningLady

+0

Предполагая, что вы точно знаете, с какими линиями вы работаете, вы можете использовать [StrSplit()] (http://ahkscript.org/docs/commands/StringSplit.htm) и превратить его в массив, затем получить доступ к массиву на разных линиях. – Sid

ответ

0

Возможно использовать:

ComObjGet() 

Что вы можете сделать, это получить объект Excel COM, то это так же, как УВА:

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 }

Также я настоятельно рекомендую использовать COM-объекта в IE тоже, таким образом, вы можете использовать идентификатор элемента или что-то подобное, чтобы получить контроль. Пример:

;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