Шаблон Visio TreeView изначально был разработан для документирования файловой системы. Однако пользователи постоянно задают вопрос - нельзя ли использовать его для облачных хранилищ.

Отвечаю - можно, хотя и потребуются некоторые дополнительные усилия.

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

Категория: Блог

В формулах шейп-листа часто используются ссылки на другие ячейки. Ячейки того же шейпа, другого шейпа, страницы, документа. Однако, как показывает практика, такие ссылки работают не всегда. Например, в старших версиях Visio может не работать ссылка на документ.

Категория: Блог

Недавно в форуме задали вопрос - что делает эта галочка. Справка высказывается по этому поводу довольно невнятно, поэтому я решил нарисовать для пояснения несколько примеров. Все-таки картинки бывают понятнее, чем слова.

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

Категория: Блог

Пакетный формат файла появился в 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))))

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

Категория: Блог

 

В предыдущей статье Функция FILENAME() и все такое я рассказывал о конструкции из формул шейп-листа, в которой формулы выстраивались в своего рода логическую цепочку и должны были срабатывать одна за другой. Кстати, цепочка была замкнутой, что еще интереснее. Но так как наши представления о последовательности выполнения формул не всегда соответствуют действительности, возникло желание каким-то образом посмотреть реальную последовательность.

Итак, имеем исходный документ (VSDX), в котором прописаны несколько связанных формул в шейп-листе документа и ссылающаяся на него формула в единственном шейпе на странице. Повторю картинку-схему.

Категория: Блог

 

Все началось с вопроса к этой функции. Пользователь заметил, что после ручного переименования файла VSDX функция начинает врать. Открываешь уже новый файл, а в поле, которое ссылается на эту функцию, выдается прежнее значение. Причем в версиях Visio 2007 и ниже баг отсутствовал и проявляется только во всех версиях с новым форматом.

Да, значение можно обновить. Например, если открыть шейп-лист, найти ячейку, использующую функцию, в строке редактирования встать в конце формулы и нажать Enter. Или через SaveAs сохранить файл под новым именем. И в том, и в другом случае поле обновляется, но дя этого нужны ручные действия. А главное - нужно вовремя вспомнить о них, иначе в документе останется ошибка, а это неприятно.

В процессе исследований выяснилось, что попытка перезаписи формулы с FileName() с использованием функции SETF() не помогает. Когда в ячейку пишется та же самая формула, то в ячейке вроде как ничего и не меняется. Значит и обновляться она не собирается.

Категория: Блог


В предыдущей статье говорилось о том, как создать CHM справку для шейпов разработанного трафарета. Сейчас хочу показать несколько другой подход.

CHM справка все-таки требует наличия дополнительного файла. Его надо правильно разместить и настроить взаимодействие с шейпами. Но что если встроить справку непосредственно в сам шейп! То есть внедрить OLE объект, сжать его в точку для невидимости в обычном режиме и открывать при необходимости.

Windows позволяет встроить множество типов разных объектов: Wordpad, документ Word, даже документ Visio. Но есть еще более интересный вариант - встроить универсальный контейнер для объектов. Такой контейнер существует - это объект Package.

Категория: Блог

 

Расширение Visio воспринимается лучше, когда оно сопровождается справкой. В простейшем случае это может быть текстовый файл, иногда PDF. Если объем справочных сведений достаточно большой, то желательно оформить справку в формате CHM. Это уже несколько труднее, чем просто написать файл Word. Вот о справке в CHM и пойдет речь ниже.

Собственно, сделать CHM файл не составляет особого труда. Существуют бесплатные инструменты, помогающие либо конвертировать сайт в формат CHM, либо прямо в этом инструменте вручную набрать оглавление и текст страничек справки. Для вызова такой справки можно либо предусмотреть кнопку на риббоне, либо вызывать ее макросом. При этом вызванная справка по умолчанию позиционируется на главную страницу, а далее действуют кнопки управления движком справки.

Но иногда хочется напрямую вызвать страницу, связанную с определенным щейпом. Такой вариант тоже возможен. Документация Visio советует использовать меню Developer / Shape Name и вписывать ссылку в поле Help: в формате FILENAME!#Number, где FILENAME - имя файла справки, а Number - числовой ID нужной страницы, назначенный в MAP секции проекта справки. Предполагается, что достаточно вписать туда нечто типа ShapeHelp.chm!#20000 и при нажатии на F1 откроется заданная страница справки. Кстати, попробовал и так и не добился успеха. По F1 упорно открывается стандартная справка Visio. Поэтому пришлось поискать другие методы.

Категория: Блог

Не секрет, что механизм тем, появившийся в последних версиях Visio, иногда плохо воспринимает трафареты, рассчитанные на отсутствие тем.

David J Parker в статье "Protecting Shapes from Themes in Visio 2013+" показал основные принципы защиты от воздействия тем. Но недавно я наткнулся на случай, в котором предложенный метод защиты оказался недостаточным.

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

Со стилями Microsoft поступила оригинально. Когда-то это был основной механизм предварительной настройки форматов и им часто пользовались. При переходе к темам доступ к стилям практически исключили из GUI, но сами-то стили остались. И там внутри они не только работают, но и могут существенно влиять на поведение шейпов.

В рассматриваемом случае в мастер-шейпе был использован стиль DFD Normal, основанный на стиле Normal. Вроде, никакого криминала. Но при переходе в новую систему наследование начинается со стиля Theme. В результате, стоит только перебросить мастер из трафарета на страницу рисунка, как в документе появляется новый стиль со следующей цепочкой наследования DFD Normal => Normal => Theme.

Категория: Блог

Недавно в форуме возник вопрос - как пристроить пункт контекстного меню шейпа не сверху, а внизу. Что удивительно, вопрос провисел долго, выдержал несколько неточных ответов и был закрыт только после появления истинного корифея. Похоже, что тема освещена явно недостаточно. Попробую слегка раскрыть.

Итак, контекстное меню. Довольно простой и быстрый способ придать интерактивность своему произведению. Не требует знания программирования, только шейп-лист. Может быть навешено как на шейп, так и на страницу. Очень удобно, когда не хочется заморачиваться с риббоном.

Как добавить к шейпу свое меню

Краткий рецепт: открыть шейп-лист, добавить секцию Actions, добавить несколько строк по количеству требуемых пунктов меню, заполнить как минимум ячейки Action и Menu.

У шейпа или страницы уже существует контекстное меню. Пользовательские пункты пристраиваются к нему дополнительно. По умолчанию они пристраиваются сверху. Такое поведение получается автоматически после заполнения двух указанных ячеек.

Плюс существует еще почти десяток ячеек, распоряжающихся нюансами поведения меню. Вот на нюансах хотелось бы остановиться подробнее. Каким может быть меню и как этого достичь.

Категория: Блог

Есть у шейпа такой метод - AutoConnect. С его помощью один шейп присоединяет к себе другой.

Метод принимает также параметр, с помощью которого можно задать направление размещения для присоединяемого шейпа. Раньше как-то не приходилось задумываться, насколько сильно влияние этого параметра на скорость работы. Но вот неожиданно такой случай подвернулся.

Была у меня программка, которая выводит в графическом виде структуру модулей проектов VBA (входимость и структуру вызовов). И вот, когда понадобилось проанализировать структуру довольно сложного проекта, был поражен ее медлительностью. Естественно, начал искать причину.
В результате обнаружилось, что наибольшее замедление дает вот этот оператор

Sh1.AutoConnect Sh2, visAutoConnectDirRight, mas

Когда-то я подумал, что схема должна располагаться слева направо, поэтому особо не задумываясь, выбрал параметр visAutoConnectDirRight. Причем размещение все равно получается не оптимальным, поэтому в конце оно еще раз приглаживается с помощью ActivePage.Layout.

Категория: Блог

Ошибки, связанные с локализацией вообще не редкость. Думаю, каждый натыкался на случай, когда копируешь код из справки, а он не работает. А все потому, что в справке стоит точка, а по условиям локализации нужна запятая. Или запятая вместо точки с запятой.

Но еще неприятнее, когда нужен макрос, который должен работать в любой локализации. Здесь уже не обойдешься простой заменой символа в коде. Или как минимум такую замену нужно делать "на лету", во время исполнения макроса. Рассмотрим несколько примеров.

Десятичный разделитель

Предположим, имеется небрежно составленный файл Excel, в котором нас интересуют дробные числа. Небрежность состоит в том, что не соблюдается однообразие форматов. Например, имеются и ячейки, отформатированы как текстовые, и ячейки, отформатированные как числа. Ниже показано, как пользователь будет видеть такой файл на машинах с разной локализацией.

  

Категория: Блог

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

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

  • текстовое сообщение;
  • селектирование;
  • добавление маркера;
  • подкраска.
Категория: Блог

Постановка задачи

Речь идет о методах Drop и DropMany в Visio.

expression.Drop(ObjectToDrop, xPos, yPos)

Мы знаем, что в качестве ObjectToDrop может выступать как мастер, так и шейп, размещенный на странице. А в справке можно прочесть такую фразу: "If ObjectToDrop is a Master, the pin of the master is dropped at the specified coordinates". По логике - если объект является не мастером, а шейпом, то его может забросить совсем в другое место. Вот этой особенности и посвящена данная статья.

Категория: Блог

Общие сведения

(По мотивам сообщения пользователя Machestro в http://visio.getbb.ru/viewtopic.php?f=29&t=1429).

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

Однако с появлением в Power Query функции доступа к архивированным файлам (см. http://sql10.blogspot.com/2016/06/reading-zip-files-in-powerquery-m.html) Visio получает еще один и очень неплохой способ формирования отчетов. Ведь если документ Visio представляет собой пакет из нескольких заархивированных XML файлов, а Power Query способен выбирать данные из XML, в том числе и из нескольких файлов, то нет препятствий к тому, чтобы пользователь Excel получил доступ к данным из файла Visio. Причем для этого даже не требуется установленный Visio. Только файл документа и Power Query.

Категория: Блог

Если макрос делается не для одного документа, то рано или поздно придется столкнуться с задачей его обновления. Пришла в голову умная мысль, улучшили макрос в одном из документов и возникает вопрос - а что делать с остальными? В них-то тоже хорошо бы провести изменение. Иногда задача еще усложняется - документы могут быть разбросаны по разным машинам и даже по разным организациям.

Конечно все можно сделать вручную. Разослать всем сообщения с указанием, что нужно изменить, и пусть меняют сами. Если не умеют, то придется сопроводить более или менее подробной инструкцией. Пользователям это обычно не нравится.

Категория: Блог

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

На входе имеется фотография дома. Напрашивается решение - импортировать в Visio картинку, нарисовать на ней гирлянды и подсчитать длину.

Категория: Блог

В статье "Автоматизация масштабирования документа" я рассказал о том случае, когда нужно было масштаб документа подстроить под рисунок. Но бывает необходимость и в обратной операции, когда масштаб рисунка жестко задан, а нужно подстроить размеры картинки.

В следующей задаче нужно было отрисовать корабль (палубу). Исходная картинка (хоть и сделана с чертежа) поступает в виде PDF, то есть ни о каком масштабе можно и не говорить. В Visio она перенесена в виде скриншота с фрагмента PDF документа.

Задача - изменить размеры картинки.

Категория: Блог

Вот сделал утилитку для вывода отчета в виде таблицы из скрипта. Всегда этого не хватало.

Известно, что для автоматизации Visio можно использовать не только VBA и различные виды Add-On и Add-In, но и скрипты на js, vbs, python и т.д. Скрипты хороши тем, что им не нужны никакие инсталляторы, они не мешают безопасности Visio и не требует наличия в системе каких-либо дополнительных компонентов. Вот только с представлением данных небольшая проблема. Строку с результатом вывести легко. А если нужна табличка, то приходится выводить в файл, который потом нужно открывать в другом приложении.

Решил побороть эту проблему с помощью Internet Explorer. Раз уж он есть в любой Windows системе, пусть поработает. В результате получилась процедура, которая выводит произвольный массив в виде таблички.

Категория: Блог

 В интернете много информации. Но мусора еще больше. И отыскать ответ на нужный вопрос бывает очень даже нелегко. Сколько раз на форумах ведел фразу - "я даже не знаю, по каким словам это нужно гуглить". Поэтому наряду с поиском хотелось бы иметь некий каталог, иерархический указатель информации по нужному предмету. Проект такого указателя по Microsoft Visio вылился в Visio Navigator.

Категория: Блог

Может быть вы обращали внимание, что многие расширения Visio сопровождаются примерами отчетов, сделанных специально под эти расширения. Более двух десятков отчетов. И это неспроста. Отчет является эффективным средством для сбора информации из готового документа Visio. Практически не затрачивая дополнительных усилий, вы можете сформировать файл Excel или XML, содержащий выбранные данные. При этом доступны такие функции как отбор нужных шейпов, сортировка, группировка и консолидация данных. А так как определение отчета можно сохранять для последующего использования, можно заранее подготовить набор типовых отчетов, которые будут использоваться в вашей деятельности.

Категория: Блог

Начинаем осваивать новый блог. На данный момент еще пустой.

Это попытка объединить сайт и блог из проекта visio.artberg.ru, visio-all.blogspot.com, visio.getbb.ru на новом хостинге. Теперь тройка выглядит как visioport.ru, visioport.ru/blog, visio.getbb.ru. Можно было бы подтянуть на единый хостинг еще и форум, но пока повременим. Ему, вроде, на данный момент ничто не угрожает, так что пусть остается на том месте, где пригрелся.

 

Категория: Блог