如何将Shape对象添加到Shapes集合

时间:2017-04-19 16:25:36

标签: vba vsto powerpoint

这看似微不足道,但我找不到办法。 PowerPoint对象模型如何允许您将Shape对象添加到幻灯片的Shapes集合中?我可以使用Shapes.AddSmartArt()Shapes.AddPicture()等函数添加新形状,但这些将添加 new 形状。如果我有一个想要添加到幻灯片形状的现有Shape对象的引用怎么办?

这样做的一种方法是在形状对象上调用Copy(),然后在目标幻灯片中调用Paste(),但我发现它不太理想,因为我们将在此过程中修改剪贴板(我知道我们可以在手术后恢复它,但这又是跛脚)。

就我搜索的内容而言,Add()集合中没有Append()Insert()Shapes个函数。

修改

也许我说得不够清楚。让我再尝试一次。假设我在这样的变量中有一个Shape对象(PowerPoint / VSTO / C#):

Shape s = GetShape(); //This function returns a Shape object
MyPresentation.Slides[1].Shapes.???(s);

我需要一个合适的功能代替???;像AddInsertAppend之类的东西,但对象模型中没有这样的东西。

1 个答案:

答案 0 :(得分:0)

形状集合是只读的。这是因为它们只包含特定于范围的形状。在Word中,该范围可以是段落,部分,标题,组形状,整个文档等。在PowerPoint中,我假设您可以从幻灯片,所有幻灯片和组形状中获取形状列表

您无法直接添加到形状集合中,因为您必须指定该形状应该去的位置。已经存在使用新形状执行此操作的方法。移动或复制形状不存在这种方法。

如果有一种方法可以在不使用复制/粘贴的情况下将形状移动到其他位置,那将是很好的,但微软的某些人必须已经确定它不值得这样做。