【问题标题】:Programmatically extract embedded file from PowerPoint presentation以编程方式从 PowerPoint 演示文稿中提取嵌入文件
【发布时间】:2011-04-02 19:12:15
【问题描述】:

我正在开发一个涉及录制和播放声音的 VSTO PowerPoint 插件。我在最后一刻被要求允许用户选择播放声音的设备,就像 Skype 一样。

一般来说,我认为不可能指定 PowerPoint 应该使用的设备,除非通过在控制面板中选择默认设备,我无法以编程方式执行此操作。但是,我可以识别我的加载项录制的声音,因为它们作为 SoundEffect 嵌入到我标记的 Shapes 中。

我的问题是:是否可以直接访问 .wav 文件 - 类似于 SoundEffect.ImportFromFile,但在另一个方向?如果可以,我可以使用加载项代码而不是 PowerPoint 打开和播放 .wav 文件。

[编辑:直接,我的意思是“不必以不同的格式保存演示文稿”]

或者,有没有办法在演示文稿中添加和检索二进制文件作为嵌入内容?

我怀疑这是不可能的,但如果有人知道,我会在 StackOverflow 上找到那个人!

【问题讨论】:

    标签: vba vsto powerpoint-2007


    【解决方案1】:

    两者都可以。

    1. 从 PPTX 中提取 WAV:所有嵌入的媒体都在 .pptx\ppt\media 文件夹中(将 .pptx 重命名为 .zip,解压缩并导航到 \ppt\media)。它们通常按照添加和/或处理的顺序依次编号。叙述,AFAIK,总是嵌入的,从不链接。问题将是确定要提取的确切内容 - 在添加到 pptx 时,可以通过向其添加标签或其他唯一标识符来解决这个问题。提取它的方法是使用 Open XML SDK(或直接使用 System.IO.Packaging)并打开当前演示文稿的内存副本,在文件夹中找到您的 .wav(我使用 Linq-to-XML 来找到我需要的东西)并将其读入内存流,以便写入磁盘进行播放,或者如果您的加载项可以从内存流中播放,甚至更好。

    2. PPTX 中的二进制类型:任何东西都可以进入 Open XML 文档,但关键是让它保持在那里。有关详细信息,请参阅此答案 - Is it possible to add some data to a Word document?

    【讨论】:

    • 感谢宅男的彻底回答。我应该在我的问题中指定以不同格式保存在我的情况下不是一个选项(它会太慢和侵入性)。我从您的回答中得知,如果我可以以特定格式保存,则可以选择,但如果我不这样做,那我就不走运了。对吗?
    • 您是指 97-2003 格式还是 2007/2010 格式的 PowerPoint?如果是这样,上面列出的内容仅适用于 2007/2010 年。 也许可以用之前的方法做点什么,我没试过。但二进制 PowerPoint 格式规范位于:msdn.microsoft.com/en-us/library/cc313106(office.12).aspx
    • 我的错,我没有完全理解你的意思 - 我认为你的方法需要首先用不同的扩展名保存文件。我尝试过 System.IO.Packaging,它确实直接打开了一个 pptx 文件,并提供了对各个部分的访问。不过,您对 2007 年前文件的警告是一个很好的警告。
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 2014-12-10
    • 2010-09-07
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多