Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Помогите пожалуйста написать макросс для Word (http://forum.oszone.net/showthread.php?t=206354)

Vovchik1900 07-05-2011 07:14 1671701

Помогите пожалуйста написать макросс для Word
 
Здравствуйте.

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

Так вот задача в чем: нужно, чтобы после того как было снято выделение с первого абзаца появлялось окно в котором бы показывалась картинка. Картинка любая. Картинку можно выбрать заранее. Все картинки лежат где-нибудь в папке(или где-нибудь еще) и вызываются по порядку.

То есть примерно такой алгоритм:
выделился абзац---снялось выделение(появилось окно, в окне появилась картинка)---выделился следующий абзац---снялось выделение(в окне появилась другая картинка)---выделился третий абзац---снялось выделение(в окне появилась следующая картинка)

Помогите пожалуйста с кодом. если не трудно.

pva 07-05-2011 13:11 1671833

Предлагаю сделать так: внешний скрипт заменяет программу, которая выделяет абзацы.
Он открывает 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, но возвращаемый объект будет определяться системой (точнее классом, под которым эта картинка зарегистрирована). В зависимости от настроек системы, может оказаться так, что откроется фотошоп (что ИМХО не подходящее средство просмотра). Ещё можно просить системы "показать", "распечатать", "редактировать", что вроде бы и гибкое, и предсказуемое решение. Если по пути найду как это сделать из скрипта - напишу.

Iska 07-05-2011 17:13 1671947

Цитата:

Цитата pva
Можно открывать картинку при помощи GetObject, но возвращаемый объект будет определяться системой (точнее классом, под которым эта картинка зарегистрирована). »

Не лучший способ, ибо нет никакой гарантии, что подобный объект будет наличествовать и будет зарегистрирован в системе.
Цитата:

Цитата pva
Ещё можно просить системы "показать", "распечатать", "редактировать", что вроде бы и гибкое, и предсказуемое решение. »

Standard Canonical Verbs and Their Behaviors:
Код:

…WScirpt.CreateObject("Shell.Application").NameSpace(<Folder>).Items(<FolderItem>).Verbs(<verb>).DoIt

lxa85 07-05-2011 22:00 1672129

у меня сейчас word 2010 под руками нет. Но ЕМНИП в нем можно записывать действия, что очень здорово облегает написание макроса.
Т.е. берем документ, открывает макросы, говорим "начать запись", выполняем ряд действий, говорим "прекратить запись" и получаем почти готовый шаблон. Чуть его подправить, и дело в шляпе.
Цитата:

Цитата Vovchik1900
Программа внешняя. »

Т.е. вообще внешняя? И как она работает с Word? Через Office API?
Если так, то внимательно скуриваем документацию

Vovchik1900 08-05-2011 06:59 1672262

pva,

Цитата:

Цитата pva
Можно открывать картинку при помощи GetObject »

А как через эту функцию сделать? Про привязку изображения к программе я позабочусь.) Думаю, что хватит стандартного просмоторщика фото в виндовс (вин7).

Цитата:

Цитата pva
Предлагаю сделать так: внешний скрипт заменяет программу, которая выделяет абзацы. »

Не никак. Нужно чтобы именно внешняя программа выделяла абзацы.

Цитата:

Цитата pva
Ещё можно просить системы "показать", "распечатать", "редактировать", что вроде бы и гибкое, и предсказуемое решение. »

да ну. хватит только открыть.

lxa85,

Цитата:

Цитата lxa85
ЕМНИП »

Это чего?

Цитата:

Цитата lxa85
Т.е. вообще внешняя? И как она работает с Word? Через Office API? »

в ворд интегрируется как надстройка. вроде, COM интерфейс. В настройках ворда так показало.

lxa85 08-05-2011 09:34 1672300

ЕМНИП - Если Мне Не Изменяет Память
Цитата:

Цитата Vovchik1900
в ворд интегрируется как надстройка. вроде, COM интерфейс. В настройках ворда так показало. »

а можно ее к сообщению прикрепить?

Vovchik1900 08-05-2011 12:41 1672424

lxa85,
Там вроде dll файл. Вы о нем?

Vovchik1900 09-05-2011 07:52 1672905

Вложений: 1
Вот он.

pva 10-05-2011 21:33 1673957

Вот оно, о чём я говорил:
Код:

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 1674431

ВСЕМ БОООЛЬШОЕ СПАСИБО!!!!!


Время: 19:55.

Время: 19:55.
© OSzone.net 2001-