Тема: AHK: Работа с Excel
Понадобилось написать скрипт который автоматизирует перенос информации из документа ворд в таблицу эксель.
Информация в ворде отображается в виде таблицы.
В таблице в экселе уже есть часть данных из ворда. Нужно внести туда оставшиеся.
Итак, выделяя в экселе номер документа я должен найти его на компьютере в вордовском формате, и если он есть, открыть его,скопировать оттуда нужную информацию и перенести её в эксель,каждую данную в свою ячейку.
Вот то, что я написал
F6::
ControlClick, EXCEL<1, A ; на выделенной ячейке взаимодействуем с контролом - строкой формул
Send ^+{left} ; выделяем нужную информацию (это кол-во позиций, без нее мы не будем знать,сколько строк нужно скопировать)
Send ^{vk43} ; копируем
amount :=Clipboard
amount -= 1 ; поскольку обычно выделение уже автоматически стоит на нужной позиции, выделять нам остается на 1 строку меньше - будет видно далее.
MsgBox, %amount% ; проверяем переменную
Send {esc} ; деактивируем контрол
Send {left 12} ; ищем следующую ячейку с нужными данными
ControlClick, EXCEL<1, A
Send {left 2} ; здесь лежит номер док-а, он нужен не весь
Send ^+{left}
Send ^{vk43}
Number :=Clipboard
MsgBox, %Number%
Send {esc}
IfExist, C:\Users\Максим\Desktop\Новая папка (8)\все\%Number%.docx ; здесь лежат все документы
{
Run, C:\Users\Максим\Desktop\Новая папка (8)\все\%Number%.docx
WinActivate ahk_exe winword.exe
Winwaitactive ahk_exe winword.exe
Sleep, 3000
Send ^{vk46} ; через нажатие Ctrl+F ищем столбец, из которого первым делом будем копировать данные
SendRaw № плавки
Send {enter}
Send {esc}
Sleep, 200
Send {down} ; из шапки таблицы спускаемся непосредственно к данным
Sleep, 200
Send +{down %amount%} ; эта переменная помогает нам скопировать именно столько строк,сколько нужно
Sleep, 200
Send ^{vk43}
melting :=Clipboard
MsgBox, Плавки %melting% ; каждая переменная проверяется, в готовой версии это уберется
Send ^{down 3} ; путем перемещения курсора находим следующий столбец с нужными данными
Send +{down %amount%}
Sleep, 200
Send ^{vk43}
length :=Clipboard
MsgBox, Длина %length%
Send ^{down}
Send +{down %amount%}
Sleep, 200
Send ^{vk43}
weigth :=Clipboard
MsgBox, Вес %weigth%
WinActivate ahk_exe excel.exe
Winwaitactive ahk_exe excel.exe
Send {right 6}
Sleep,200
Send %melting% ; переменная почему то копируется не в исходном виде, а через строку,хотя до этого видна в правильном формате. так же, при ручном копировании из ворда в эксель,строки вставляются подряд.
MsgBox, %amount% ; решил проверить переменную еще раз, т.к. следующая команда с ней не выполнялась
Sleep,200
Send {vk26 %amount%} ; когда копируешь несколько строк,при перемещении курсора на следующий столбец, он остается на уровне нижней строки.Команда должна поднимать курсор вновь на верхнюю строку. Здесь и далее она почему то не срабатывает
Send {right 3}
Sleep,200
Send %length%
Sleep,200
Send {vk26 %amount%}
Send {right}
Sleep,200
Send %weigth%
}
return
Из-за двух проблем работа стоит на месте.
1) Переменные из ворда в эксель вставляются не в исходном виде,как строка-ниже-строка-ниже-строка, а как строка-пустая строка-строка-пустая строка-строка. При копи-пастинге в ручную этой проблемы нет.
2) Не срабатывает простейшая команда с переменной.
Кто нибудь знает как решить эти проблемы,или может быть, видит, где я ошибся?
Я прикрепил образец таблицы эксель. В начале показано как должно быть, далее - как у меня получается.