以编程方式更新/替换visio图中的形状(C#)

时间:2012-08-07 10:58:53

标签: c# visio

我想以编程方式(C#)更新/替换给定visio流程图(*。vsd)的所有形状。图表布局保持不变(所有连接,坐标等都相同),但主 - 形状应该不同(来自不同的模板)。 任何例子,建议和想法都受到高度赞赏。


感谢您的建议!源图有许多受保护的形状,这些形状被分组(+多个子形状),所以我想如果我获取给定源形状的所有信息,然后从目标模板中删除一个新的主,那将会更好。设置这些属性。接下来,我会采用下一个Shape并做同样的事情。我会创建一个新的Visio文档,因为我不确定,源页面ShapeSheet是否未定制。但我不知道如何在C#中以编程方式执行基本步骤。

  • 如何在C#中创建新的vsd文件(也许 application.Documents.AddEx(“”))
  • 我必须使用application.Document.OpenEx打开此文档,否则文档已经打开/活动
  • 我必须在此文档中创建一个新页面 - ...

在这篇文章中:"save and close visio documents visual basic macro "解释了类似的步骤,但是在VBA中,而不是在C#中。

2 个答案:

答案 0 :(得分:2)

我建议只使用Visio 2013,它具有开箱即用的功能。

然而,这可能不适合你。我过去采取了两种不同的路线,这取决于原始形状和替换形状之间的差异。

实现此目的的一种方法是,在形状之间复制尽可能多的属性,并复制胶水和所有内容。所以要做到这一点,你只需复制宽度,高度,针脚等,然后逐步穿过原始形状的所有胶水,并将胶水移动到新的形状。

另一方面,在我看来,这是一个更清洁,是将所有几何部分从原始部分复制到目标形状。这使得你不必担心胶水和格式和东西,只是复制构成形状的图形。

如果你有一个带有多个子形状的分组形状,可能会更容易删除一个新的主,但如果它只是一个简单的图形类型形状,复制几何可能更好。

使用“复制几何”方法需要注意的一点是,您必须确保新形状中任何几何单元格的先例的任何用户单元格或控件也存在于原始形状中。 Visio的Cell类告诉你一个单元格的先例,所以这很容易做到。

希望有所帮助。

答案 1 :(得分:0)

我认为您可以从这两个链接中提取一些信息并使用它:

Visio shape - get X,Y position

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