Добавление фигур в новый документ Visio - PullRequest
4 голосов
/ 27 февраля 2012

У меня есть этот код, который создает новый документ Visio и добавляет прямоугольник. Это работает, но мне не нравится открывать другой документ, чтобы получить из него коллекцию Мастеров. Проблема в том, что новый документ содержит пустую коллекцию фигур Мастеров. Я не смог найти метод в классе Document для добавления фигур в коллекцию Masters, и все примеры, которые я мог найти для добавления фигур, предполагали, что у вас уже есть документ. Есть ли лучший способ сделать то, что я хочу?

// create the new application
Visio.Application va = new Microsoft.Office.Interop.Visio.Application();

        // add a document
        va.Documents.Add(@"");

       // Visio.Documents vdocs = va.Documents;

        // we need this document to get its Masters shapes collection
        // since our new document has none 
        Visio.Document vu = vdocs.OpenEx(@"C:\Program Files (x86)\Microsoft       Office\Office12\1033\Basic_U.vss", (short)Microsoft.Office.Interop.Visio.VisOpenSaveArgs.visOpenDocked);

        // set the working  document to our new document
        Visio.Document vd = va.ActiveDocument;

        // set the working page to the active page
        Microsoft.Office.Interop.Visio.Page vp = va.ActivePage;

      // if we try this from the Masters collection from our new document
      // we get a run time since our masters collection is empty
     Visio.Master vm  = vu.Masters.get_ItemU(@"Rectangle");
    Visio.Shape visioRectShape = vp.Drop(vm, 4.25, 5.5);
        visioRectShape.Text = @"Rectangle text.";

Ответы [ 2 ]

5 голосов
/ 28 февраля 2012

Вы правы - коллекция Мастеров доступна только для чтения. Документы обычно начинаются с пустой коллекции мастеров. Коллекция заполняется удалением мастеров из трафаретного документа.

Если вы хотите создать новый документ с предварительно заполненной коллекцией мастеров, то вы можете создать свой собственный шаблон (.vst), а затем основывать свой новый документ на этом. Например:

Visio.Document vDoc = vDocs.Add("MyTemplateFile.vst");

Обычно вы собираете свои трафареты и шаблоны вместе, а затем всегда создаете фигуры, удаляя мастер из соответствующего документа трафарета (.vss).

Мастера также имеют свойство MatchByName. Отбрасывая мастер, когда для этого свойства установлено значение true, Visio сначала проверяет, существует ли мастер этого мастера в коллекции мастеров документа чертежа. Если это произойдет, экземпляр этого мастера будет удален. Если не новый мастер будет добавлен на основе исходного трафарета. Посмотрите на эти две ссылки для получения дополнительной информации:

Если вы действительно хотите создавать свои собственные мастера в коде, вы можете рисовать / отбрасывать свои собственные фигуры на странице, а затем использовать метод Document.Drop, чтобы добавить его в коллекцию мастеров.

Также, если вы хотите использовать мастер по имени, вам нужно будет просмотреть коллекцию мастеров, чтобы проверить, существует ли она, прежде чем использовать ее.

2 голосов
/ 29 февраля 2012

Я думаю, вы найдете эту онлайн-книгу чрезвычайно полезной: http://msdn.microsoft.com/en-us/library/aa245244(v=office.10).aspx

...