Пакетный формат файла появился в Visio, начиная с версии 2013, и остается основным действующим во всех последующих версиях. Документ Visio представляет собой архив, содержащий множество папок и XML файлов. В принципе, это обычный ZIP архив. То есть всегда можно разархивировать его и посмотреть любой отдельный файл. Причем, не только вручную, но и программно.

Это привело к тому, что документ Visio стал "прозрачным", то есть его можно рассматривать не только через шейп-лит или программно через объектную модель, но и в текстовом редакторе. Хочу остановиться на вопросе - как это может помочь при документировании разработки?

Вообще, документирование разработки - это очень непростой вопрос. Вот например, все привыкли, что разработка прибора всегда сопровождается разработкой схемы и технического описания. К программе тоже обязан прилагаться как минимум текст программы и чаще всего описание. А теперь вспомните - встречали ли вы когда-нибудь документацию на решение на основе Visio? Скорее всего - нет.

Эта статья не содержит открытий, а больше похожа на запись "для памяти". Чтобы, когда понадобится, можно было быстренько вспомнить и подключить к документу Visio риббон с пользовательской вкладкой.

Постановка задачи. Имеется документ с макросами; задача - добавить вызов макросов из риббона.

В районе 2007-2010 с появлением риббона было несколько публикаций на тему, как добавить к нему свою вкладку. Практически все они основывались на интерфейсе IRibbonExtensibility и подключении пользовательского риббона в момент открытия документа.

Однако с появлением в Visio 2013 нового (пакетного) формата файлов появилась возможность намертво связать пользовательский риббон с документом, просто навсегда включить его в состав документа. Получается простая и компактная конструкция, которой вполне достаточно, чтобы управлять несколькими макросами.

Недавно в форуме возник вопрос - почему не отображается изменение данных в окне Shape Data Window. Рассматривалась вот такая конструкция.

Страница имеет 4 поля данных. По замыслу переключение значения в поле Show/Hide All должно переключать видимость остальных трех полей.Цепочка событий:

  • изменяем Show на Hide в окне Shape Data;
  • значение ячейки User.HideAll изменяется с FALSE на TRUE;
  • значение ячеек Invisible трех остальных полей переключается в TRUE;
  • поля A, B, C в окне Shape Data становятся скрытыми.

Так вот, пользователь заметил, что такая конструкция на уровне шейпа работает, как и задумано, а вот на уровне страницы поведение сильно отличается.

 

Недавно потребовалось сделать смарт-шейп... Такой весь из-себя управляемый данными. И формулы получались довольно сложными. Вот например, есть список типов

принтер;МФУ;копир;сканер;терминал;инж.сист.;факс;дупликатор

и задание к нему - в зависимости от типа отображать одну из 5 картинок. В итоге требование вылилось вот в такую формулу с вложенными IF, OR и STRSAME.

IF(STRSAME(Prop._VisDM_Тип_устр,"Принтер",1),4,IF(STRSAME(Prop._VisDM_Тип_устр,"Инж.сист.",1),3,IF(OR(STRSAME(Prop._VisDM_Тип_устр,"Сканер",1),STRSAME(Prop._VisDM_Тип_устр,"Факс",1)),2,IF(OR(STRSAME(Prop._VisDM_Тип_устр,"МФУ",1),STRSAME(Prop._VisDM_Тип_устр,"Копир",1),STRSAME(Prop._VisDM_Тип_устр,"Дупликатор",1)),1,0))))

Написал, проверил - получил ошибку. Исправил - опять ошибка. Ну невозможно сходу и без ошибок создать такое.