Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 13:21

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Поиск связанных шейпов к внешним данным
СообщениеДобавлено: 03 фев 2019, 13:39 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск связанных шейпов к внешним данным
СообщениеДобавлено: 03 фев 2019, 14:25 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

Добавить очки репутацииУменьшить очки репутации
Как ни странно, но в рекордсете такая информация содержится.
Имеется некая коллекция 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.
Так что можно посмотреть объект в отладчике, нет ли там подходящего свойства или метода.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск связанных шейпов к внешним данным
СообщениеДобавлено: 03 фев 2019, 14:55 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 2253
Очков репутации: 100626

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Поиск связанных шейпов к внешним данным
СообщениеДобавлено: 03 фев 2019, 15:30 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB