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

Речь идет о методах 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.

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

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

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

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

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