在PowerPoint插件中访问幻灯片对象

4
我正在为PowerPoint构建一个插件,需要访问幻灯片或幻灯片对象,甚至整个演示文稿;可惜,我所能看到的唯一方法是打开一个ppt文件。现在我不得不采用hacky方法,保存当前演示文稿并使用Packaging重新打开它以操作任何内容(更具体地说,我必须从pptx文件中SHA幻灯片对象,以查看它们是否已更改--不理想)。
有没有办法在PowerPoint中打开当前打开的文件而无需IO文件?
感谢您的帮助, P
1个回答

0

我假设您已经在VisualStudio中创建了一个PowerPoint(2007/2010)Add-In项目。通常情况下,您可以通过静态类Globals访问活动演示文稿,方法如下:

Globals.ThisAddIn.Application.ActivePresentation.Slides[slideIndex] ...

编辑:用法示例:

using PowerPoint = Microsoft.Office.Interop.PowerPoint;

...

try
{
    int numberOfSlides = Globals.ThisAddIn
        .Application.ActivePresentation.Slides.Count;

    if (numberOfSlides > 0)
    {
        // get first slide
        PowerPoint.Slide firstSlide = Globals.ThisAddIn
            .Application.ActivePresentation.Slides[0];

        // get first shape (object) in the slide
        int shapeCount = firstSlide.Shapes.Count;

        if (shapeCount > 0)
        {
            PowerPoint.Shape firstShape = firstSlide.Shapes[0];
        }

        // add a label
        PowerPoint.Shape label = firstSlide.Shapes.AddLabel(
                Orientation: Microsoft.Office.Core
                   .MsoTextOrientation.msoTextOrientationHorizontal,
                Left: 100,
                Top: 100,
                Width: 200,
                Height: 100);

        // write hello world with a slidenumber
        label.TextFrame.TextRange.Text = "Hello World! Page: ";
        label.TextFrame.TextRange.InsertSlideNumber();
    }
}
catch (Exception ex)
{
    System.Windows.Forms.MessageBox.Show("Error: " + ex);

}

非常感谢@JanW。您知道是否可以安全地序列化/反序列化此对象以访问其内容吗? - user1713993
添加了一个示例。不要考虑序列化/肮脏的解决方法。Office Interop的ObjectModel几乎是完整的。您可以通过托管对象访问所有内容,就像在编辑的帖子中一样。 - JanW
再次感谢,抱歉回复晚了。我现在想做的是在演示文稿之间复制幻灯片。到目前为止,我唯一能够做到的是使用InsertFromFile(),因为我无法直接访问ActivePresentation上的幻灯片对象。我希望能够以相当低的级别进行操作,所以您知道是否有一种方法可以访问内存中的对象(而不是每次想要从一个演示文稿复制幻灯片时都进行文件I/O!)。再次感谢--非常感激。 - user1713993
你是指在两个打开的PowerPoint实例之间复制幻灯片吗?还是你想选择一个对话框中的文件来复制幻灯片? - JanW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接