Показать полную графическую версию : [решено] Помогите пожалуйста написать макросс для Word
Vovchik1900
07-05-2011, 07:14
Здравствуйте.
Помогите пожалуйста решить задачку. Дело вот в чем:
Имеем *.doc или *.docx файл. В нем находится текст. Текст разделен на абзацы. Есть программа, которая может выделять текст по абзацам: выделила абзац, через некоторое время сняла выделение и выделила следующий, потом опять сняла и так пока документ не закончится. Программа внешняя.
Так вот задача в чем: нужно, чтобы после того как было снято выделение с первого абзаца появлялось окно в котором бы показывалась картинка. Картинка любая. Картинку можно выбрать заранее. Все картинки лежат где-нибудь в папке(или где-нибудь еще) и вызываются по порядку.
То есть примерно такой алгоритм:
выделился абзац---снялось выделение(появилось окно, в окне появилась картинка)---выделился следующий абзац---снялось выделение(в окне появилась другая картинка)---выделился третий абзац---снялось выделение(в окне появилась следующая картинка)
Помогите пожалуйста с кодом. если не трудно.
Предлагаю сделать так: внешний скрипт заменяет программу, которая выделяет абзацы.
Он открывает doc-файл и надеется что он окажется вордовским (точно знает только система). Затем выделяет пресловутые абзацы и вызывает внешнее приложение для показа картинок, например mspaint. Но можно любой браузер.
// набросок скрипта (не проверен, только демонстрирует идею)
var doc = WScript.GetObject("my_doc.doc", "Word.Document"),
shell = WScirpt.CreateObject("WScript.Shell");
doc.application.visible = true;
for(var i=1; i<=doc.paragraph.count; ++i) // надо бы подумать над условием
{
doc.selection.range = doc.paragraph.item(i);
WScript.Sleep(5000);
doc.selection.range.clear();
shell.run("mspaint " + i + ".jpg");
}
Подробное описание как чего делать с вордом есть в руководстве по использованию VBA в справочной системе Microsoft Office. Описание WScript и WshShell - в MSDN.
Можно открывать картинку при помощи GetObject, но возвращаемый объект будет определяться системой (точнее классом, под которым эта картинка зарегистрирована). В зависимости от настроек системы, может оказаться так, что откроется фотошоп (что ИМХО не подходящее средство просмотра). Ещё можно просить системы "показать", "распечатать", "редактировать", что вроде бы и гибкое, и предсказуемое решение. Если по пути найду как это сделать из скрипта - напишу.
Можно открывать картинку при помощи GetObject, но возвращаемый объект будет определяться системой (точнее классом, под которым эта картинка зарегистрирована). »
Не лучший способ, ибо нет никакой гарантии, что подобный объект будет наличествовать и будет зарегистрирован в системе.
Ещё можно просить системы "показать", "распечатать", "редактировать", что вроде бы и гибкое, и предсказуемое решение. »
Standard Canonical Verbs and Their Behaviors (http://msdn.microsoft.com/en-us/library/bb776883(v=vs.85).aspx#canonical):
…WScirpt.CreateObject("Shell.Application").NameSpace(<Folder>).Items(<FolderItem>).Verbs(<verb>).DoIt
у меня сейчас word 2010 под руками нет. Но ЕМНИП в нем можно записывать действия, что очень здорово облегает написание макроса.
Т.е. берем документ, открывает макросы, говорим "начать запись", выполняем ряд действий, говорим "прекратить запись" и получаем почти готовый шаблон. Чуть его подправить, и дело в шляпе.
Программа внешняя. »
Т.е. вообще внешняя? И как она работает с Word? Через Office API?
Если так, то внимательно скуриваем документацию (http://msdn.microsoft.com/ru-ru/library/ff936213.aspx)
Vovchik1900
08-05-2011, 06:59
pva,
Можно открывать картинку при помощи GetObject »
А как через эту функцию сделать? Про привязку изображения к программе я позабочусь.) Думаю, что хватит стандартного просмоторщика фото в виндовс (вин7).
Предлагаю сделать так: внешний скрипт заменяет программу, которая выделяет абзацы. »
Не никак. Нужно чтобы именно внешняя программа выделяла абзацы.
Ещё можно просить системы "показать", "распечатать", "редактировать", что вроде бы и гибкое, и предсказуемое решение. »
да ну. хватит только открыть.
lxa85,
ЕМНИП »
Это чего?
Т.е. вообще внешняя? И как она работает с Word? Через Office API? »
в ворд интегрируется как надстройка. вроде, COM интерфейс. В настройках ворда так показало.
ЕМНИП - Если Мне Не Изменяет Память
в ворд интегрируется как надстройка. вроде, COM интерфейс. В настройках ворда так показало. »
а можно ее к сообщению прикрепить?
Vovchik1900
08-05-2011, 12:41
lxa85,
Там вроде dll файл. Вы о нем?
Vovchik1900
09-05-2011, 07:52
Вот он.
Вот оно, о чём я говорил:
var appli = WScript.CreateObject("Shell.Application");
appli.ShellExecute("d:\\photo\\test-1.jpg", null, null, "open", 1);
WScript.Sleep(5000);
appli.ShellExecute("d:\\photo\\ava12.jpg", null, null, "open", 1);
WScript.Sleep(5000);
Только не знаю, как закрыть потом окошки.
Vovchik1900
11-05-2011, 17:31
ВСЕМ БОООЛЬШОЕ СПАСИБО!!!!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC