Visio 2010 Надстройка

Я пишу надстройку Visio 2010. Мне нужно обработать документ и проанализировать все объекты внутри него.

Как первый я получил текущий экземпляр Visio

        IVisio.Application app;

        object visioObject = Marshal.GetActiveObject("Visio.Application");
        app = visioObject as IVisio.Application;

Сейчас если

if (app.ActiveDocument != null)

Как мне получить все элементы активного документа? Как понять тип анализируемого элемента? Если этот элемент имеет тип Entity (Object реляционный), как мне получить доступ ко всем определениям столбцов?

Надеюсь, я очистился.

Спасибо за возможные советы!

2 ответа

Я бы начал со справки по автоматизации Visio 2010, которую можно найти по адресу:

http://msdn.microsoft.com/en-us/library/ee861526.aspx

Объектная модель Visio - довольно большой зверь, который требует времени, чтобы понять и понять. Но все классы документированы в MSDN, поэтому вы сможете найти там ссылки, примеры и, возможно, даже дискуссионные форумы.

Документ в основном состоит из основных форм и страниц. Это оба контейнера для объектов Shape. А внутри фигур вы найдете форму с ее объектами Section, Row и Cell. Каждая ячейка имеет формулу и значение.

Есть и другие, но этого может быть достаточно, чтобы вы начали.

Простой способ запуска может быть следующим модульным тестом, который записывает все формы и имена в консоль:

[TestMethod]
public void testVisio()
{
    Microsoft.Office.Interop.Visio.Application visioApp = null;
    try
    {
        //Create a new instance of Visio
        visioApp = new Microsoft.Office.Interop.Visio.Application();
        // Show Visio
        visioApp.Visible = true;

        foreach (Page page in visioApp.ActiveDocument.Pages)
        {
            foreach (Shape shape in page.Shapes)
            {
                Console.WriteLine(String.Format("Page {0}: Shape-Name: {1}", page.Name, shape.Name));
            }
        }
    }
    finally
    {
        //Close started application again
        visioApp.Quit();
        Marshal.ReleaseComObject(visioApp);
        visioApp = null;
    }
}

Конечно, вы можете заменить visioApp.ActiveDocument ссылкой, которую вы уже упоминали в своем сообщении.

Более подробную информацию можно найти в MSDN, например, http://msdn.microsoft.com/en-us/library/gg617997.aspx и, как правило, я рекомендую немного поиграть, и вы найдете нужные объекты, например, фигуры имеют ячейки, в которых могут храниться пользовательские свойства и т. д. Или, если нет, вы можете задать более конкретный вопрос.

Другие вопросы по тегам