Форум пользователей Visio
http://visio.getbb.ru/

Поиск связанных шейпов к внешним данным
http://visio.getbb.ru/viewtopic.php?f=6&t=1411
Страница 1 из 1

Автор:  Machestro [ 03 фев 2019, 13:39 ]
Заголовок сообщения:  Поиск связанных шейпов к внешним данным

Добрый день! Возник вопрос следующего характера. Допустим есть многостраничный документ visio. К документу подключена книга Excel как внешние данные. У внешних данных есть несколько строк. К одной и той же строке привязаны шейпы на разных страницах. Если кликнуть правой кнопкой мыши на строку данных и из контекстного меню выбрать "Связанные фигуры", то будет показан список всех фигур в Документе (то есть на всех листах), которые имеют связь с данной строкой. Такой же список я хотел получить из под VBA. Однако, прочитав много справок и мануалов я нашёл, что объект Page имеет метод GetShapesLinkedToDataRow, который вернёт массив с указанием всех шейпов связанных с данной строкой на СТРАНИЦЕ, а мне нужно знать все шейпы в Документе. Пока вижу, что нужно обрабатывать все страницы перебором. Но из контекстного меню видно, что visio уже знает все шейпы, которые связаны с этой строкой. Может быть есть хитрый способ как извлечь эту информацию.
Для справки - использую Visio версии 2019

Автор:  Tumanov [ 03 фев 2019, 14:25 ]
Заголовок сообщения:  Re: Поиск связанных шейпов к внешним данным

Как ни странно, но в рекордсете такая информация содержится.
Имеется некая коллекция RowMap, в которой перечислены идентификаторы строк и соответствующие ID страниц и шейпов.
Код:
         <vx:RowMap RowID='1' PageID='0' ShapeID='1'/>
         <vx:RowMap RowID='2' PageID='0' ShapeID='6'/>
         <vx:RowMap RowID='1' PageID='2' ShapeID='1'/>

Это видно, если сохранить документ в XML и поисследовать.
По иерархии она находится прямо в DataRecordSet.
Так что можно посмотреть объект в отладчике, нет ли там подходящего свойства или метода.

Автор:  Tumanov [ 03 фев 2019, 14:55 ]
Заголовок сообщения:  Re: Поиск связанных шейпов к внешним данным

Посмотрел. Ничего интересного не нашел.
Получается, непосредственно из XML сохраненного документа такую информацию выдернуть можно. Но для интерактивной работы это скорее всего не годится.
Наверное Visio дергает данные из этой коллекции только с привязкой к одной странице. О причине тоже догадаться можно. Он ведь дергает идентификаторы, а они уникальны только внутри одной страницы.
Так что, получается два варианта:
либо быстро-быстро перебирать все страницы,
либо (если документ меняется редко) сделать это один раз, создавая свою коллекцию, а потом выбирать данные из нее.

Автор:  Machestro [ 03 фев 2019, 15:30 ]
Заголовок сообщения:  Re: Поиск связанных шейпов к внешним данным

Спасибо за ответ. Интуитивно чувствовал, что эта информация есть в формате XML, поэтому очень надеялся что свойство DataAsXML у объекта datarecordset будет содержать нечто подобное, но оказалось это не так

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/