1

Тема: AHK: Работа с Word

Суть проблемы такова - мне на почту приходит множество писем с текстовым содержанием (документы,таблицы,цифры,текст и т.д.). Все это идет в письме не отдельным файлом, а в самом теле письма.
Моя задача - скопировать содержание письма, сохранить в ворде,дать имя документу в зависимости от полученной информации( я просто копирую номер документа из письма), каждый в свою папку в зависимости от даты и другой информации,указанной в документе.
Пытался упростить свою задачу - сделать возможность скопировать в буфер выделенный номер в вордовском документе,закрыть и сохранить этот документ,и переименовать,вставить имя из буфера обмена и сохранить одним нажатием хоткея.

f7:: clipboard = Send, ^c !f4{enter}FileMove^v{enter}

Вот то, что я написал.
Вместо этого в документ вписывается часть кода и все.
Прошу помощи, AHK открыл для себя только сегодня.

2

Re: AHK: Работа с Word

Никто не знает,как решить эту проблему?Найти не получается ничего подобного. Может,кто нибудь может скинуть ссылку на тему с подобным скриптом, а я уже попробую сам по аналогии разобраться...

3 (изменено: Alectric, 2014-11-19 16:01:13)

Re: AHK: Работа с Word

Deluxe пишет:

f7:: clipboard = Send, ^c !f4{enter}FileMove^v{enter}

Что за манипуляции вы пытались сделать в этом коде? Пример ожидаемого ответа: послать нажатие того-то, перенести из буфера то-то.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

4 (изменено: Deluxe, 2014-11-19 21:44:18)

Re: AHK: Работа с Word

Допустим, я открыл ворд, скопировал в него какую то информацию и выделил мышкой номер состоящий из 8 цифр, допустим, 12345678.
Пытался сделать так:
1) Выделенные цифры копируются в буфер обмена.
2) Файл ворда закрывается и сохраняет изменения.
3) Редактируется имя этого файла (переименовывается).
4)Из буфера обмена в имя файла копируются 8 цифр из п. 1
Теперь я должен получить файл с названием 12345678 и сохраненной в нем инфой.

Так вот, я пытался объединить несколько сочетаний "горячих" клавиш в одно.
Ctrl+C,чтобы скопировать 8 заранее вручную выделенных цифр,затем Alt+F4,чтобы вызвать окошко закрытия файла, затем Enter,чтобы подтвердить закрытие файла с сохранением, затем переименовать файл(эту команду я нашел в табличке AHK), затем еще раз Enter,чтобы подтвердить переименование файла.

5 (изменено: Deluxe, 2014-11-20 02:14:42)

Re: AHK: Работа с Word

Сегодня еще поковырялся - результаты таковы:
по отдельности все прекрасно работает

F5::Send ^+{Right}{Ins}^{vk43} - копировать слово после курсора
F7::Send !{F4}{enter} - закрыть активное окно с сохранением изменений
F8::Send {vk71}^{vk56}{enter} - переименовать выделенный файл,вставить в имя содержимое буфера обмена,сохранить.

Попытался объединить - закрывает с сохранением изменений и все.
Вот то,что пишу

F9::Send ^+{Right}{Ins}^{vk43}!{F4}{enter}{vk71}^{vk56}{enter}

Как объединить эти три скрипта в один,чтобы заработало?

6 (изменено: Alectric, 2014-11-20 06:11:17)

Re: AHK: Работа с Word

Нужно писать не в одну строку, а по отдельности. И если потребуется добавить задержки между действиями.

F5::
Send ^+{Right}{Ins}^{vk43} ; копировать слово после курсора
;sleep,300
Send !{F4}{enter} ; закрыть активное окно с сохранением изменений
;sleep,300
Send {vk71}^{vk56}{enter} ; переименовать выделенный файл,вставить в имя содержимое буфера обмена,сохранить.
return

Комментарии в коде пишутся через ";"(точка с запятой), а не через "тире".

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

7

Re: AHK: Работа с Word

Alectric пишет:

Нужно писать не в одну строку, а по отдельности.

Спасибо большое,помогло.)

И если потребуется добавить задержки между действиями.

А вот тут вышла заминка. Первые два действия выполняются,последнее ни в какую. Увеличивал задержку последовательно до 3000, и никаких результатов. Еще раз проверил последнюю строку - отдельно код работает...

Комментарии в коде пишутся через ";"(точка с запятой), а не через "тире".

Буду знать,спасибо!

8 (изменено: Alectric, 2014-11-20 14:50:06)

Re: AHK: Работа с Word

Переименовывать можно командой filemove.
Или можно не просто сохранять, а "сохранять как" и сразу вбивать туда имя.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9 (изменено: stealzy, 2014-11-20 15:52:35)

Re: AHK: Работа с Word

А у вас что закрытие ворда мгновенное? И после закрытия выделение сразу на проводнике с этим файлом устанавливается?

SendMode Input
#If WinActive("ahk_class OpusApp") ; хоткей действует только при активном окне Word-a (в скобках класс окна Word 2013 года)

; в 2013 можно вызвать окно "Сохранить как" нажав: альт+(ф,к,1)
; {vk12 down}{vk41}{sleep 100}{vk52}{sleep 100}{vk31}{vk12 up}
; переименуем - зажмем шифт и 4 раза стрел влево, чтоб оставить расширение.(хотя может и не нужно это)
; {vk10 down}{vk25 4}{vk10 up}^{vk56}{enter}
; все вместе. (Не испытано.Используя данный скрипт, вы соглашаетесь с лицензией BSD. Автор ответсвенности не несет:-)

F8::
Send ^+{Right}{Ins}^{vk43}{sleep 300}{vk12 down}{vk41}{sleep 100}{vk52}{sleep 100}{vk31}{vk12 up}{sleep 500}{vk10 down}{vk25 4}{vk10 up}^{vk56}{enter}
return
#If

10

Re: AHK: Работа с Word

Большое спасибо всем,кто мне помогал!
Используя ваши советы у меня получилось автоматизировать часть работы!
Вот то,что у меня получилось, и вроде как,вполне работоспособно :-)

vk53::
Send ^{vk43} ; копируем выделенное
Sleep,300
WinActivate ahk_exe winword.exe ; переключаемся на ворд
Winwaitactive ahk_exe winword.exe ; ждем,пока окошко станет активным
Send ^{vk56} ; вставляем
Sleep,900 
Send ^{vk24} ; переносим курсор в начало страницы
Sleep,100
Send {vka2 down}{down 7}{vka2 up} ; спускаемся на 7 абзацев вниз
Send ^{Right} ; пропускаем все пробелы
Sleep,100
Send ^+{Right}{Ins} ; выделяем номер после курсора
Send ^{vk43} ; копируем его
Send {f12} ; вызываем окно сохранения файла
Sleep,300
Send ^{vk56}  ; копируем номер в название
Send {enter} ; сохраняем
Sleep,100
Send ^{vk41} ; выделяем все содержимое документа
Sleep,500
Send {delete} ; удаляем
Sleep,100
WinActivate ahk_exe chrome.exe ; переключаемся на открытый почтовый ящик в хроме
Winwaitactive ahk_exe chrome.exe ; ждем,пока окошко станет активным
Sleep,100
Send ^{up} ; открываем следующее письмо
Return

В итоге - я мышью копирую текст в письме, запускаю скрипт, и он на выходе дает мне вордовский док-т с числовым названием. Жаль,что в майл ру почте не предусмотрены горячие клавиши выделения текста письма,однако я написал в техподдержку,может, у них есть способ решения этой проблемы.
Так же следует отметить,что все получаемые письма, это текстовые документы с шаблонными шапками. Благодаря этому и получилось присваивать нужное название каждому документу.
На основе этого у меня и возник вопрос: есть ли способ при помощи AHK сортировать эти документы по папкам( а при необходимости и создавать эти папки), в зависимости от даты,указанной в этом документе, при условии что дата указывается всегда в строго определенном месте? Названия папок должны соответствовать дате док-а.

11 (изменено: stealzy, 2014-11-21 00:30:40)

Re: AHK: Работа с Word

Конечно, в AHK есть все инструменты для этого, но раз уж вы вызываете окошко сохранения, то почему не нажать F4 и ввести нужный вам путь.


SendMode Input
;...
send ^{vk43} ; ctrl+c
myFile:=clipboard
;...
send ^{vk43} ; ctrl+c
myDate:=clipboard
; ...
send {F4}^{vk41}{del}C:\%myDate%\file_%myFile%.doc{enter}

12 (изменено: Deluxe, 2014-11-20 20:52:41)

Re: AHK: Работа с Word

stealzy пишет:

Конечно, в AHK есть все инструменты для этого, но раз уж вы вызываете окошко сохранения, то почему не нажать F4 и ввести нужный вам путь.

Идея отличная, и я уже успел было порадоваться простому решению... но ведь на момент вызова окна сохранения буфер уже занят будущим именем файла,а у каждого документа разные даты. :-(
Или можно как то сохранить в буфер 2 отдельных куска текста и потом последовательно их вставить,каждый в свое окошко?

13 (изменено: Alectric, 2014-11-20 22:09:41)

Re: AHK: Работа с Word

Можно сохранять буфер в свои переменные в определенных моментах.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

14

Re: AHK: Работа с Word

Alectric пишет:

Можно сохранять буфер в свои переменные в определенных моментах.

Как?
Признаюсь честно - я в этом мало что понимаю,и некоторые термины мне абсолютно неясны(
Если не сложно,можешь,пожалуйста,привести пример,чтобы я смог сделать по аналогии? Ну или хотя бы ссылку,где это действо описывается, и с чем его есть... Желательно в интерпретации для чайников)))

15 (изменено: Alectric, 2014-11-20 22:53:28)

Re: AHK: Работа с Word

Переменные можно называть как угодно и присваивать им любое (почти) значение, в том числе и содержимое других переменных, такой как clipboard (это встроенная в AHK переменная, остальные можно посмотреть в справке).


; копируем нужный текст
bufer:=clipboard ; сохраняем в свою переменную, чтобы потом использовать
; копируем другой текст
Other:=clipboard ; в другую переменную

В справке также есть инфо об этом и многом другом с примерами.

http://www.script-coding.com/AutoHotkey … 46.07.html

http://www.script-coding.com/AutoHotkeyTranslation.html

http://forum.script-coding.com/viewtopic.php?id=3042

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

16

Re: AHK: Работа с Word

Alectric , огромное спасибо, буду разбираться!)

17

Re: AHK: Работа с Word


; ...
Send ^{vk43} ; копирую номер
myDate1:=clipboard
Sleep,100
Send {vka2 down}{down 5}{vka2 up}
Send ^{Right 3} ; ищу дату
Sleep,100
Send ^+{Right}{Ins}
Send ^{vk43} ; копирую дату
myDate2:=clipboard
Sleep,100
Send {f12}
Sleep,300
Send ^{vk56}%myDate1% ; вставляю номер в имя файла(курсор автоматически стоит в графе имя файла)
Sleep,300
Send {F4}^{vk41}{del}C:\Users\Максим\Desktop\Папка скрипта\%myDate2%{enter} ; вставляю дату в путь в  назв. папки
Sleep,100
Send {enter}
; ...

Что то у меня с руками беда походу(.
Во первых,в имя файла вставляются сразу две переменных - и дата, и номер.(ДатаНомер)
Во вторых, папка не создается, т.е. если по адресу нет такой папки - выдается ошибка. (Не удается найти C:\Users\Максим\Desktop\Папка скрипта\Дата Проверьте,правильно ли написаны слова для поиска и повторите попытку.)
В третьих, даже если создам в ручную папку - не желает ни в какую сохранять файл - остается окно сохранения.

18 (изменено: Alectric, 2014-11-21 06:46:58)

Re: AHK: Работа с Word

Clipwait  после копирования (ждать буфер дословно). Filecreatedir - создать папку перед там как использовать.
Как использоватьсмотри в справке.

OFF: С телефона неудобно все описывать.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

19

Re: AHK: Работа с Word

Alectric пишет:

Clipwait  после копирования (ждать буфер дословно).

Спасибо,дружище,за совет!)

ClipWait, 2
if ErrorLevel <> 0
{
    MsgBox, Попытка скопировать текст в буфер обмена неудачна.
    Return
}
MsgBox, clipboard = %clipboard%

Это помогло мне найти ошибку в коде,увидел,что переменные сохранялись правильно. Все оказалось совсем просто -

Send ^{vk56}%myDate1% ; вставляю номер в имя файла(курсор автоматически стоит в графе имя файла)

вот ошибка в чем, я вставлял содержимое буфера и переменной одновременно)



Filecreatedir - создать папку перед там как использовать.


Тоже спасло меня от нудного перебирания вручную файлов,и создания кучи папок. Теперь можно добавить еще третью переменную, создавать многоуровневые папки и сортировать по ним док-ы. Это здорово!)

А насчет сохранения возникал вопрос - после вставки имени файла и указания пути сохранения почему то не закрывалось окошко сохранения, что бы я ни пытался сделать. Пришлось решать эту проблему довольно топорно

Send {f12}
Sleep,300
Send %myNumber% ; отправляю ввод имени файла из переменной
Sleep,300
FileCreateDir C:\Users\Максим\Desktop\Папка скрипта\%myDate%\%myStantion% ; создаю папки при помощи двух переменных
Sleep,200
Send {F4}\%myDate%\%myStantion%{enter} ; отправляю ввод пути сохранения файла
Sleep,300
Send {vk09 13} ; отправляю нажатие Tab 13 раз,чтобы выделить кнопку "Сохранить"
Sleep,300
Send {enter}

Увеличивал задержки,менял количество нажатий энтера,пытался использовать "горячие" клавиши - все бестолку... В любом случае,теперь код работает,как надо,хотя иногда совершает ошибки.

Еще раз Большое Спасибо Alectric за ценные советы и подсказки, а так же огромная благодарность stealzy за отличные примеры и образцы кодов!!!

20 (изменено: Alectric, 2014-11-21 20:24:53)

Re: AHK: Работа с Word

Winwait - ждать появления окна (сохранения).
ControlSetText - изменять содержимое (текст) "контролов" (элементов управления), ClassNN которого можно увидеть в AU3_spy в комплекте с AHK.
ControlClick - нажимать на определенную кнопку окна (ClassNN также).

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

21

Re: AHK: Работа с Word

Alectric пишет:

ControlClick - нажимать на определенную кнопку окна (ClassNN также).

Это намного удобнее,чем считать кол-во нажатий Tab! Отлично.
Еще одна ценная монетка в копилку знаний об AHK

22 (изменено: stealzy, 2014-11-23 11:56:14)

Re: AHK: Работа с Word

Deluxe, я дал вам глупый совет жать F4. Можно вводить путь прямо в поле "имя файла".
Получаем:


Send {f12}
FileCreateDir C:\Users\Максим\Desktop\Папка скрипта\%myDate%\%myStantion% ; создаю папки при помощи двух переменных
Sleep,300
Send C:\Users\Максим\Desktop\Папка скрипта\%myDate%\%myStantion%\%myNumber%{enter} ; отправляю ввод имени файла из переменной

Поставьте вначале скрипта SendMode Input или SendMode
Play для надежности

23 (изменено: Deluxe, 2014-11-23 16:10:22)

Re: AHK: Работа с Word

stealzy пишет:

Deluxe, я дал вам глупый совет жать F4. Можно вводить путь прямо в поле "имя файла".

Почему глупый? Все нормально! Ведь при отправке нажатия F12 по умолчанию активен контрол с именем файла. А для активации контрола с путем сохранения файла, нажатие  F4 как раз помогает.
В принципе,для надежности,его можно заменить на ControlSetText, но и F4  еще ни разу не подводил,даже при совершении большого количества циклов.

Поставьте вначале скрипта SendMode Input или SendMode
Play для надежности

Использовал в другом скрипте, и, честно сказать, не почувствовал разницы.
Его нужно писать сразу,после присвоения гор. клавиши?

vk53::
SendMode Input
Loop 4 {
Sleep,600 ; эта пауза нужна для задержки перед следующим выполнением цикла
Click down 435, 398
;...


Спустя некоторое время


Код полностью автоматизирован, от меня нужно только поставить кол-во повторений. Заметил, что каждый первый запуск скрипта за день (ну или сеанс) обречен на провал. Копирует не то, как следствие сохраняет не те папки (в том случае,если вообще дошел до этого момента).А может и вообще открыть не те вкладки и т.д.
Вчера вот узнал о существовании вкладок и окон ворда, о которых ранее и не подозревал .
Но суть не в этом. Попробовал дописать SendMode Input,как в приведенном выше примере и код совсем сбрендил. Раньше хоть перезапустишь - и работает нормально. Тут же я с большим трудом то  закрыл сам скрипт - трей постоянно сворачивался, то вовсе был не активен,но даже после закрытия не все закончилось. Некоторое время продолжалась эмуляция нажатия и удержания кнопки Ctrl. Потом закончилось само по себе)

OFF:
Не сказать, что у меня сильно слабое железо.Тем более для таких простых операций.
Волей не волей поверишь в скайнет...

24 (изменено: stealzy, 2014-11-24 09:17:56)

Re: AHK: Работа с Word

Потому что путь можно писать в поле(контрол) имя файла перед сбственно именем. Так что f4 лишнее.
Вы код мой запускали?
Насчет глюков - приведите свой код полностью. Как правило глюки в ахк из-за непродуманного кода.

25

Re: AHK: Работа с Word

Потому что путь можно писать в поле(контрол) имя файла перед собственно именем. Так что f4 лишнее.

Точно, я об этом не подумал,спасибо. Только вот необходимость в создании папок пропала  в связи с тем, что следующему скрипту нужно будет искать эти файлы и взаимодействовать с ними. http://forum.script-coding.com/viewtopic.php?id=10182

Насчет глюков - приведите свой код полностью. Как правило глюки в ахк из-за непродуманного кода.

vk53::
Loop 3 {
Sleep,600
Click down 435, 398
sleep,100
Send {down 22}
sleep,200
MouseMove 1858, 894
Click up
Sleep,200
Send ^{vk43}
Sleep,300
WinActivate ahk_exe winword.exe
Winwaitactive ahk_exe winword.exe
Send ^{vk56}
Sleep,1000
Send ^{vk24}
Sleep,300
Send {vka2 down}{down 5}{vka2 up}
Send ^{Right}
Sleep,100
Send ^+{Right}{Ins}
Send ^{vk43}
myNumber:=clipboard
Sleep,100
Send {f12}
Sleep,300
Send ^{vk41}{del}C:\Users\Максим\Desktop\Documents\%myNumber%{enter}
Sleep,600
ControlClick, button8, A
Sleep,600
Send ^{vk41}
Sleep,500
Send {del}
Sleep,100
WinActivate ahk_exe chrome.exe
Winwaitactive ahk_exe chrome.exe
Sleep,100
Send ^{up}
}
Return

При первом запуске код обязательно заглючит. Будет копировать весь текст столбцом вдоль левого края документа,притом очень долго.
И еще. В зависимости от названия папки может выдавать ошибку, что такой папки не найдено, при сохранении файла.
Если название написано кириллицей и в два или более слова - обязательно заглючит. Так же, даже если написано одно слово в названии папки,но с большой буквы - есть вероятность что опять выдаст ошибку.
Я решил, чтобы обойти эти проблемы, создавать папки только с латинскими буквами в названии.

26 (изменено: Alectric, 2014-11-24 19:02:18)

Re: AHK: Работа с Word

Выделил черным то, что на мой взгляд ненужно, и прокомментировал.

+ открыть спойлер

vk53::
Loop 3
{
Sleep,600
Click down 435, 398
sleep,100
Send {down 22}
sleep,200
MouseMove 1858, 894
Click up
Sleep,200
Send ^{vk43}
Sleep,300
WinActivate ahk_exe winword.exe
Winwaitactive ahk_exe winword.exe
Send ^{vk56}
Sleep,1000
Send ^{vk24}
Sleep,300
Send {vka2 down}{down 5}{vka2 up}
Send ^{Right}
Sleep,100
Send ^+{Right}{Ins} ; зачем тут инсерт?
Send ^{vk43}
myNumber:=clipboard
Sleep,100
Send {f12}
Sleep,300
;Send ^{vk41}{del}C:\Users\Максим\Desktop\Documents\%myNumber%{enter}  ; зачем ентер, если ниже жмется кнопка?
ControlSetText,Edit1,C:\Users\Максим\Desktop\Documents\%myNumber%,a
;Sleep,600  ; не обязателен
ControlClick, button8, A
Sleep,600
Send ^{vk41}
Sleep,500
Send {del}
Sleep,100
WinActivate ahk_exe chrome.exe
Winwaitactive ahk_exe chrome.exe
Sleep,100
Send ^{up}
}
Return

Хотя это наверно ничего и не изменит...

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

27

Re: AHK: Работа с Word

Хотя это наверно ничего и не изменит...

Да, это вряд ли поможет.