All Forums
 Категория Visio
 Форум Вопросы и ответы
 Как с Word грамотно связать ?
Next Page
Author Previous Topic Topic Next Topic

bdfy

Belarus
267 Posts

Posted - 09/28/2008 :  08:21:03
есть один дочтаточно большой файл визио.
Необходимо разные его части вставить в вордовский документ, причем с сохранением связей желательно (чтоб потом заново не вставлять при изм. данных). Специальная вставка - связать с документами визио не работает.
Как правильно сделать ?

Tumanov

Russia
1198 Posts

Posted - 09/28/2008 :  08:58:29
Возможный вариант:
1. все вставляемые фрагменты рисуются на отдельных страницах Visio. Страницы называются именами будущих рисунков;
2. пишется программка (макрос или внешняя) экспорта страниц Visio в метафайлы (в специальную папку);
3. пишется программка вставки картинок из отдельной папки в документ Word.
Вторая программа не обязательна. В случае обновления документа Visio запускается первая программа, обновляющая все метафайлы. Так как в документе Word прописаны ссылки, он при этом обновляется автоматически.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/28/2008 :  09:02:26
жесть... впрочем третий пункт уже можно и руками. с обычными картинками ворд связать не проблема. вот странно что два продукта от MS и так здорово дружат :)
а страницы в визио можно автоматически генерить из большой первой по "вьюпортам" как автокаде ?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/28/2008 :  09:15:56
quote:
по "вьюпортам" как автокаде

Мне эти слова ничего не говорят. Но скорее всего нельзя (готовыми средствами). А если писать программку, то скорее всего без проблем. Только надо ей объяснить, как делить изображение на фрагменты.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/28/2008 :  09:38:00
что есть в автокаде вьюпорт (viewport).
1. все рисование выполняется в так называемой модели 1 к 1.
2. на листах рисуются рамочки и прочее оформление. вставляются эти самые окна-вьюпорты через которую словно смотришь на модель. в нужном масштабе, под нужным углом и т.д. для визио - область выбранную в выбранном масштабе вьюпорт должен показывать. реально ли это (тут вроде такой вопрос как то уже подымали правда...)

А может можно иметь в документе Ворд один файл визио который в разных местах просто "откручен" на разные места рисунка ? как это реализовать ?

Edited by - bdfy on 09/28/2008 09:39:22
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/28/2008 :  10:09:48
Конечно можно. Только я это отношу к "некачественным решениям" :)
Вставляете в Word все изображение страницы Visio через буфер. Повторяете это несколько раз в нужных местах. Потом открываете каждую вставку на редактирование, изменяете размер окна, двигаете внутри рисунок, чтобы показывалась нужная часть изображения, меняете масштаб и т.д. Можно даже страницы перелистывать.
Недостатки следующие:
- документ становится потяжелее;
- в разных версиях Word, Visio и Windows что-нибудь через некоторое время может взбрыкнуть.
Через картинки оно как-то надежнее :)
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/28/2008 :  10:16:43
quote:
Вставляете в Word все изображение страницы Visio через буфер. Повторяете это несколько раз в нужных местах

эт самое... но я ведь так получу N-документов Visio внедренных в Word. а я хочу именно один открытый просто в разных местах. это возможно ?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/28/2008 :  10:37:02
Ну, это все с точностью до формулировок...
По-моему, "Часть документа" - ее в принципе внедрить невозможно (если не прибегать к трансформации, например, к преобразованию в картинку).
Будем считать вопрос открытым (может еще кто чего подскажет)... но я такого способа не знаю.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/28/2008 :  10:47:18
А может и знаю, если подумать...
Если Вы вставляете рисунок Visio не через буфер, а через вставку / Объект / Создание из файла и выбираете ссылку на файл, то сам документ вообще не вставляется. Только ссылка.
А в ворде к изображению (см., настройка изображения) можно применить Crop (обрезка) и просматривать только кусочек изображения.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/28/2008 :  11:40:46
quote:
А в ворде к изображению (см., настройка изображения) можно применить Crop (обрезка) и просматривать только кусочек изображения.

во первых настраивать эту обрезку жуть как неудобно. а во-вторых пробовал - орезка ограничена 58ью см почему то... :)
quote:
По-моему, "Часть документа" - ее в принципе внедрить невозможно (если не прибегать к трансформации, например, к преобразованию в картинку).

да внедрится то весь, показываться должна только часть. это реально при просто вставке, но документы на каждую вставку получаются разные а нужен один...
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 10/11/2008 :  07:31:33
quote:
2. пишется программка (макрос или внешняя) экспорта страниц Visio в метафайлы (в специальную папку);

таки надо написать. алгоритм думаю следующий :
1. обвести прямоугольниками прозрачными. с заданными именами. вопрос - как фигуре имя прописать к которому можно обращатся ?
2. печатать в рисунок выделяемую прямоугольником часть рисунка. print selection в визио есть. вопрос как выделить все что в пределах прямоугольника ?
чем печатать еще тоже. вопрос... MS Office Document image writer в станд есть. но размер "бумаги" поменять через макрос можно ли ? через запись не получилось...

Edited by - bdfy on 10/11/2008 09:12:37
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/11/2008 :  11:21:24
Как-то Вы усложняете...
В простейшем виде программка выглядит вот так:
<job id="VBS">
<script language="VBScript">
Dim i, docName, FName
If WScript.Arguments.Count > 0 Then
	docName = WScript.Arguments(0)
	Set appVisio = CreateObject("Visio.InvisibleApp")
	Set docObj = appVisio.Documents.Open(docName)
	For i = 1 to docObj.Pages.Count
		FName = Replace(docName, ".vsd", "-" & i & ".wmf")
		docObj.Pages(i).Export FName
	Next
	s = "Обработан файл " & docName & " страниц: " & docObj.Pages.Count
	docObj.Close
	appVisio.Quit
	Set docObj = Nothing
	Set appVisio = Nothing
End If
MsgBox s
</script>
</job>

Если этот текст записать в файл с расширением .wsf, положить его иконку на стол и набросить на него файл Visio, то он сделает то, что я рассказывал - выведет все странички в формате wmf с именами - название файла + порядковый номер.
В картинку входит, естественно, только значащая часть рисунка (даже если она занимает один уголок на большом листе.
(Мне такого вполне хватает).
-------------------------
В Вашем случае может быть лучше не накрывать чем-то шейпы, а просто сгруппировать их. У группы может быть имя (к которому можно обращаться).
Либо разнести по слоям. И в каждой конкретной операции выводить только шейпы с одного слоя.
Собственно, можно и накрывать специальным шейпом и вычислять накрытые, но с непривычки Вы с таким макросом можете долго провозиться.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 10/11/2008 :  14:54:05
quote:
Если этот текст записать в файл с расширением .wsf, положить его иконку на стол и набросить на него файл Visio, то он сделает то, что я рассказывал - выведет все странички в формате wmf с именами - название файла + порядковый номер.

это конечно здорово. но для меня реально неудобно. редактировать отдельные схемы неудобно. ибо каждая схема есть результат преобразования следующей и их хочется видеть сразу все а не листать страницы. так что вопросы в силе.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/11/2008 :  16:38:18
1. Меню Format / Special поле Name
2. В данном случае наверно удобнее всего через SpatialNeighbors. Примерно так:
Set vs = ActivePage.Shapes("transparent").SpatialNeighbors(visSpatialContain, 0.2, 0)
For Each sh In vs
ActiveWindow.Select sh, visSelect
Next
(Это если в п. 1 Вы дали накрывающему шейпу имя "transparent").
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 10/12/2008 :  09:52:36
работает отлично. выделяется как раз как надо.
а вот с печатью разобратся пока не получилось. подумываю не проще ли будет выделенный фрагмент в новый лист а затем уже ваш код запускать :)
вот только как листы обнулять лучше ? удалением или есть команда очистить ?

Edited by - bdfy on 10/12/2008 09:53:06
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/12/2008 :  10:20:06
Page (из моего примера) - не единственный объект, который можно экспортировать. Это можно делать и с селектированными шейпами, например, так:
ActiveWindow.Selection.Export ...
Go to Top of Page
Previous Topic Topic Next Topic  
Next Page
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)