vba - 以编程方式从 PowerPoint 演示文稿中提取嵌入文件

标签 vba vsto powerpoint-2007

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

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

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

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

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

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

最佳答案

两者都有可能。

  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? .

关于vba - 以编程方式从 PowerPoint 演示文稿中提取嵌入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3550417/

相关文章:

vba - 更改文本格式的所有 vlookup 格式

excel - 比较列与范围并在 VBA 中的多个工作表之间删除

vba - 引用 powerpoint 演示文稿和幻灯片时出现错误 451

excel - VSTO Excel AddIn 使用 Enterprise Library 吞咽异常

c# - 防止在调整 Windows 窗体大小时重绘控件

c# - 保存和自动保存 PowerPoint OpenXML PresentationDocuments

excel - 如何计算单元格直到值大于 0?

com - F# 2.0、Silverlight 5 和 Excel 互操作

vba - 在 MS PowerPoint 中查找和突出显示文本