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 и, как правило, я рекомендую немного поиграть, и вы найдете нужные объекты, например, фигуры имеют ячейки, в которых могут храниться пользовательские свойства и т. д. Или, если нет, вы можете задать более конкретный вопрос.