Author |
Topic |
Mihail
Russia
10 Posts |
Posted - 08/18/2004 : 17:48:46
|
код работает спасибо.. скачал SDK для 2002 Visio там кое что есть. но т.к. ни разу не сталкивался не могу ни как сделать отдельный модуль из этого кода. Как придумать, что бы можно было, для любого документа визио, потом делать так application.addons("SaveasWeb").Run "/quiet=True /target=path\test.htm"
|
|
|
immortal
Russia
391 Posts |
Posted - 08/19/2004 : 06:05:33
|
quote: не могу ни как сделать отдельный модуль из этого кода. Как придумать, что бы можно было, для любого документа визио, потом делать так
значит так! устанавливаешь визуал бейсик 6 запускаешь его, сразу выходит окно, где выбираешь создание нового проекта: Standart EXE Имеем чистую форму кликаем дважды на форме, открывается окно с кодом формы и сразу создаст обработку события, в данном случае загрузка формы: Form_Load вставляем следующий код вне событий, в начале кода формы: Public vis As Object 'определяем переменную визио для всего модуля, далее значение этой переменной будет во всех модулях формы
далее в Private Sub Form_Load() Set vis = GetObject(, "Visio.Application") 'определяем ссылку на объект визио 'ну и любые операции с документом визио, в нашем случае
vis.application.addons("SaveasWeb").Run "/quiet=True /target=path\test.htm" ' учтите, если документ не открыт произойдет ошибка End Sub
для открытия документа: vis.Application.document.openex "путь к документу", visopenrw только не знаю работает ли при закрытом визио, по идее должно
для поиска файлов воспользуйся функцией dir после отладки вставь обработку ошибок on error resume next
для закрытия формы: unload form1 если это поставить в функцию Form_Load то после всех операций она выгрузится сама если будет использоваться только эта функция, то Public vis As Object можно определить в нутри неё dim vis As Object
в данном случае любой код в VBA переделывается в VB добавлением в начале vis, соответственно если вы назовете эту переменную по другому, то и тут она измениться, как пример работы с внешним приложением можно взять для екселя, ворда или другого компанента офиса, в экселе GetObject(, "Excel.Application") а в визио будет GetObject(, "Visio.Application"), удачи
сохраняем ехе проект и усе
|
Edited by - immortal on 08/19/2004 06:08:29 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 08/19/2004 : 15:52:09
|
Хочется внести некоторые уточнения...
Форма, как я понимаю, здесь совершенно не нужна - сойдет и консольное приложение. Visio нет смысла держать все время открытым, достаточно открывать, когда нужно. Лучше открывать его вообще в невидимом режиме - чего зря экраном трясти... Остальное я написал чуть раньше, чем увидел последний ответ, но корректировать не буду - пусть будет второй вариант :)
Маленькая тонкость - объект VisSaveAsWeb может использоваться только in-process. Это значит - из макроса Visio или Add-In. Вам же, как я понял, нужно работать из внешней программы. В этом случае лучше пользоваться готовым Add-On, поставляемым и автоматически устанавливающимся с Visio и работающим в режиме командной строки. Общая схема такая: Нужно запустить .exe (Вашу программу) - программа откроет документ Visio и использует в нем метод Run имеющегося в коллекции Visio аддона SaveAsWeb с передачей ему нужных параметров командной строки. Потом закроет документ Visio и сама завершится.
Программа создается в VB6 (например, в Visual Studio). Я делал консольное приложение вот с таким кодом:
Sub Main()
Dim appVisio As Visio.Application Dim docsObj As Visio.Documents Dim docObj As Visio.Document Dim pagsObj As Visio.Pages
Set appVisio = CreateObject("Visio.InvisibleApp") Set docsObj = appVisio.Documents Set docObj = docsObj.Add("C:\temp\Drawing1.vsd") Set pagsObj = appVisio.ActiveDocument.Pages appVisio.Addons("SaveAsWeb").Run "/quiet=True /target=C:\temp\Drawing1.htm" appVisio.Quit End Sub
pagsObj здесь не нужен, но понадобится, если Нужно будет узнать количество страниц в документе. Visio открывается в невидимом режиме. Программа сохраняет рисунок Drawing1.vsd в виде Drawing1.htm В References проекта должна присутствовать ссылка на Visio (у меня это Microsoft Visio 2002 Type Library). Выполняется Make, получается .exe, его можно положить в любую папку и запускать, когда надо вручную или каким-то скриптом.
Естественно, все это можно сделать и не в VB6, а в другой среде.
|
|
|
Mihail
Russia
10 Posts |
Posted - 08/20/2004 : 10:15:26
|
... да , все очень здорово .. я тут пол дня обновлял свою win2k.. обалдеть скока ей надо было.. поставил все ж таки VS.net версия VB 7 пишет .. не знаю хорошо это или нет . .но дугои у меня не нашлось только VS98 есть еще но ее не ставил. и тут читая ваши ответы заметил что мне наверное не совсем то нужно сделать то.. был код который sab saveasweb() заработал у меня. так вот мне нужно сначала следать этот код ADD-ON-ом как то, а сие у меня ни как не получается пока. а параметры этому адону я могу и напрямую из Lotus передавать appVisio.Addons("SaveAsWeb").Run "/quiet=True /target=C:\temp\Drawing1.htm". и exe другои какои то для чего мне не поиму пока . подскажите плз как сделать мне Add-on с методом SaveAsWeb или этот Add-on где то есть уже .. и я просто не вкуриваю чего то.. Сенькс. Михаил.
|
Edited by - Mihail on 08/20/2004 10:17:54 |
|
|
Mihail
Russia
10 Posts |
Posted - 08/20/2004 : 10:53:34
|
Ребяты ! огромный пардон .. я супер тормоз, такую тему тут накрутил столько сам тут навозился vs.net и т.п. .. а оказывается все так.. я сеичас просто в лотусе поставил строку в коде (догадался так и ) appVisio.Addons("SaveAsWeb").Run ("/quiet=True /openbrowser =False /target=C:\temp\test.htm") и у меня, весь документ, как вы думаете .. благополучно сохранился как веб страница .. все просто супер ..спасибо огромное, что помогли разобраться.. |
Edited by - Mihail on 08/20/2004 11:21:17 |
|
|
Topic |
|
|
|