2012-01-24 38 views
3

有没有办法使用VSTO访问PowerPoint演示文稿中当前活动的幻灯片?如果我可以获得当前活动的形状,也是很好的。我知道如何通过幻灯片/形状迭代,但我找不到任何财产弄清楚幻灯片/形状是否处于活动状态:在幻灯片中访问活动幻灯片/访问活动形状在PowerPoint中 - VSTO

 foreach (Slide slide in presentation.Slides) 
     { 
      foreach (Shape shape in slide.Shapes) 
      { 
      } 
     } 

回答

7

看那.Selection对象。

它有一个.Type属性,告诉你选择了什么。如果它是SlideRange,则选择可能是一个或多个幻灯片;由你决定如果> 1时该怎么做,但是如果是1,那么.Selection.SlideRange(1)会给你一个对所选幻灯片的引用。

.Type可能会返回ShapeRange,在这种情况下,如果选择多个形状,您将使用.Selection.ShapeRange(1)获取当前形状或范围中的第一个形状。形状的.Parent属性返回形状所在的幻灯片的引用(幻灯片,主,布局等等)。

如果.Type返回TextRange,则必须在父链上走几步;文本的父项是textrange,textrange的父项是包含的形状,而形状的父项是形状所在的幻灯片。

这在某些版本的PowerPoint 2007中很容易分崩离析(我记得它在SP1或2之前破解),并且在2010年选中表格中的文本时它仍然会被破坏。您可以操作文本,您可以访问包含文本但不是全部的形状的一些属性,并且无法爬上.Parent梯子到幻灯片。

+0

Globals.ThisAddIn.Application.ActiveWindow.Selection - 确实:)你已经让我的一天:)非常感谢!你还可以看看我正在处理的另一个问题吗? :http://stackoverflow.com/questions/8993376/identify-shape-on-the-slide-in-powerpoint-vsto-api-using-id-title-whatever – dragonfly

+0

在那里。做到了。穿着“标签!尊重他们!” T恤。 –

+0

这一切都很好,直到你在做这件事时得到这个异常 - 选择(未知成员):无效的请求。目前没有合适的选择。 – PandaWood