【发布时间】:2016-07-04 01:43:52
【问题描述】:
我必须编写一个应用程序,它会迭代 visio 绘图并替换形状。
我测试了新的 Visio 2013 API 方法 Shape.ReplaceShape() 并且这有效
迄今为止。
问题是,在调用 .ReplaceShape() 后,用户定义的单元格及其值不会复制到新形状中,我不知道,我该怎么做(优雅地)。
【问题讨论】:
我必须编写一个应用程序,它会迭代 visio 绘图并替换形状。
我测试了新的 Visio 2013 API 方法 Shape.ReplaceShape() 并且这有效
迄今为止。
问题是,在调用 .ReplaceShape() 后,用户定义的单元格及其值不会复制到新形状中,我不知道,我该怎么做(优雅地)。
【问题讨论】:
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
很遗憾,如果您的用户单元格引用形状的 shapesheet 中的其他单元格,除非它们是标准单元格(如对象单元格:宽度、高度等...),这对您来说会变得更加复杂。
p>因此,如果您的旧形状具有引用的动作或划痕或几何单元格,则您必须适当地处理它。在尝试复制单元格之前,您可以检查它是否有先例单元格,并且根据您正在处理的形状的性质,您可以决定是否只复制值而不是公式,这可能或者在新形状中可能不会无效。
如果您的用户单元格仅引用其他用户单元格,那么您可以在复制任何公式之前在 ToShp 中创建所有复制单元格,这样可以解决这种情况下的任何错误。但重点是,在复制公式之前,您需要确保单元格的任何先前行都可用。
【讨论】: