Author |
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 прописаны ссылки, он при этом обновляется автоматически.
|
|
|
bdfy
Belarus
267 Posts |
Posted - 09/28/2008 : 09:02:26
|
жесть... впрочем третий пункт уже можно и руками. с обычными картинками ворд связать не проблема. вот странно что два продукта от MS и так здорово дружат :) а страницы в визио можно автоматически генерить из большой первой по "вьюпортам" как автокаде ? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/28/2008 : 09:15:56
|
quote: по "вьюпортам" как автокаде
Мне эти слова ничего не говорят. Но скорее всего нельзя (готовыми средствами). А если писать программку, то скорее всего без проблем. Только надо ей объяснить, как делить изображение на фрагменты. |
|
|
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 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/28/2008 : 10:09:48
|
Конечно можно. Только я это отношу к "некачественным решениям" :) Вставляете в Word все изображение страницы Visio через буфер. Повторяете это несколько раз в нужных местах. Потом открываете каждую вставку на редактирование, изменяете размер окна, двигаете внутри рисунок, чтобы показывалась нужная часть изображения, меняете масштаб и т.д. Можно даже страницы перелистывать. Недостатки следующие: - документ становится потяжелее; - в разных версиях Word, Visio и Windows что-нибудь через некоторое время может взбрыкнуть. Через картинки оно как-то надежнее :) |
|
|
bdfy
Belarus
267 Posts |
Posted - 09/28/2008 : 10:16:43
|
quote: Вставляете в Word все изображение страницы Visio через буфер. Повторяете это несколько раз в нужных местах
эт самое... но я ведь так получу N-документов Visio внедренных в Word. а я хочу именно один открытый просто в разных местах. это возможно ? |
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/28/2008 : 10:37:02
|
Ну, это все с точностью до формулировок... По-моему, "Часть документа" - ее в принципе внедрить невозможно (если не прибегать к трансформации, например, к преобразованию в картинку). Будем считать вопрос открытым (может еще кто чего подскажет)... но я такого способа не знаю. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 09/28/2008 : 10:47:18
|
А может и знаю, если подумать... Если Вы вставляете рисунок Visio не через буфер, а через вставку / Объект / Создание из файла и выбираете ссылку на файл, то сам документ вообще не вставляется. Только ссылка. А в ворде к изображению (см., настройка изображения) можно применить Crop (обрезка) и просматривать только кусочек изображения. |
|
|
bdfy
Belarus
267 Posts |
Posted - 09/28/2008 : 11:40:46
|
quote: А в ворде к изображению (см., настройка изображения) можно применить Crop (обрезка) и просматривать только кусочек изображения.
во первых настраивать эту обрезку жуть как неудобно. а во-вторых пробовал - орезка ограничена 58ью см почему то... :) quote: По-моему, "Часть документа" - ее в принципе внедрить невозможно (если не прибегать к трансформации, например, к преобразованию в картинку).
да внедрится то весь, показываться должна только часть. это реально при просто вставке, но документы на каждую вставку получаются разные а нужен один... |
|
|
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 |
|
|
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 с именами - название файла + порядковый номер. В картинку входит, естественно, только значащая часть рисунка (даже если она занимает один уголок на большом листе. (Мне такого вполне хватает). ------------------------- В Вашем случае может быть лучше не накрывать чем-то шейпы, а просто сгруппировать их. У группы может быть имя (к которому можно обращаться). Либо разнести по слоям. И в каждой конкретной операции выводить только шейпы с одного слоя. Собственно, можно и накрывать специальным шейпом и вычислять накрытые, но с непривычки Вы с таким макросом можете долго провозиться. |
|
|
bdfy
Belarus
267 Posts |
Posted - 10/11/2008 : 14:54:05
|
quote: Если этот текст записать в файл с расширением .wsf, положить его иконку на стол и набросить на него файл Visio, то он сделает то, что я рассказывал - выведет все странички в формате wmf с именами - название файла + порядковый номер.
это конечно здорово. но для меня реально неудобно. редактировать отдельные схемы неудобно. ибо каждая схема есть результат преобразования следующей и их хочется видеть сразу все а не листать страницы. так что вопросы в силе. |
|
|
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"). |
|
|
bdfy
Belarus
267 Posts |
Posted - 10/12/2008 : 09:52:36
|
работает отлично. выделяется как раз как надо. а вот с печатью разобратся пока не получилось. подумываю не проще ли будет выделенный фрагмент в новый лист а затем уже ваш код запускать :) вот только как листы обнулять лучше ? удалением или есть команда очистить ? |
Edited by - bdfy on 10/12/2008 09:53:06 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 10/12/2008 : 10:20:06
|
Page (из моего примера) - не единственный объект, который можно экспортировать. Это можно делать и с селектированными шейпами, например, так: ActiveWindow.Selection.Export ...
|
|
|
Topic |
|