Visio 2010 Add-in

本文关键字:Add-in 2010 Visio | 更新日期: 2023-09-27 17:48:59

我正在编写一个Visio 2010插件。我需要处理文档并分析其中的所有对象。

首先我得到了Visio的当前实例

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

现在,如果

if (app.ActiveDocument != null)

如何获取活动文档的所有元素?我应该如何理解我正在分析的元素的类型?如果这个元素的类型是实体(对象关系),我应该如何访问所有的列定义?

希望我已经澄清了。

感谢最后的提示!

Visio 2010 Add-in

我将从Visio 2010 Automation参考开始,在网上找到:

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

Visio对象模型是一个相当庞大的庞然大物,需要一些时间来吸收和理解。但是这些类都在MSDN上有文档,所以你应该可以在那里找到参考,例子,甚至可能是讨论论坛。

文档基本上由母版形状和页面组成。它们都是Shape对象的容器。在形状内部,您将找到形状表及其Section、Row和Cell对象。每个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,一般我建议只是玩一点,你会发现所需的对象,例如形状有可以存储用户属性的单元格等。如果没有,你可以问一个更具体的问题。