我必须编写一个应用程序,它会迭代visio绘图并替换形状。
我测试了新的Visio 2013 API方法Shape.ReplaceShape()
,这很有效
至今。
问题是在调用.ReplaceShape()后,用户定义的单元格及其值不会以新形状复制,我不知道,我怎么能这样做(优雅)。
答案 0 :(得分:1)
Visio API提供了执行此操作所需的功能。不幸的是,API调用不允许您指定复制用户单元格,因此您必须自己进行复制。
不是C#代码,更接近VBA,但作为一种简单的方法应该足够好(下面简化假设):
For idx = 0 to FromShp.RowCount(visSectionUser) - 1
newRow = ToShp.AddRow(visSectionUser,visRowLast,visTagDefault)
ToShp.CellsSRC(visSectionuser,newRow,0).formulaU = FromShp.CellsSRC(vissectionUser,idx,0).formulaU
Next idx
不幸的是,如果您的用户单元格引用形状的形状表中的其他单元格,那么对您来说会更复杂,除非它们是标准单元格(如对象单元格:宽度,高度等等)。
因此,如果您的旧形状具有引用的动作或划痕或几何单元格,则必须适当地处理该形状。在尝试复制单元格之前,您可以检查它是否具有先前单元格,并且根据您正在处理的形状的性质,您可以决定是否仅复制值而不是公式,这可能是或者在新形状中可能无效。
如果您的用户单元格仅引用其他用户单元格,则可以在复制任何公式之前在ToShp中创建所有复制单元格,并且在这种情况下将处理任何错误。但重点是,您需要确保在复制公式之前,单元格的任何先行行都可用。