2010-08-23 44 views
3

我正在研究一種涉及錄製和播放聲音的VSTO PowerPoint加載項。我在最後一分鐘被要求允許用戶選擇可以播放聲音的設備,例如Skype。從PowerPoint演示文稿中以編程方式提取嵌入的文件

一般來說,我不認爲有可能指定什麼設備的PowerPoint應該使用,除非選擇控制面板中的默認設備,我不能以編程方式。不過,我可以識別我加載項記錄的聲音,因爲它們被嵌入爲我標記的形狀中的SoundEffect。

我的問題是:是否有可能直接訪問.wav文件 - 類似SoundEffect.ImportFromFile的等效內容,但在另一個方向?如果我可以這樣做,我可以打開並使用加載項代碼播放.wav文件,而不是PowerPoint。

[編輯:通過直接,我的意思「而無需保存不同格式的演示文稿」]

另外,有一種方法來添加和檢索二進制文件,在演示文稿中嵌入的內容?

我懷疑這是不可能的,但是如果有人知道,我會在StackOverflow上找到那個人!

回答

4

兩者都是可能的。從PPTX

  1. 提取的WAV文件:所有的嵌入式媒體都在.PPTX \ PPT \ Media文件夾(重命名.PPTX爲.zip,解壓並導航到\ PPT \媒體)。它們通常按照它們被添加和/或處理的順序依次編號。敘述,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?

+0

感謝徹底解答宅男。我應該在我的問題中指定以不同的格式保存在我的情況下不是一種選擇(它會太慢和侵入性)。我從你的回答中瞭解到,如果我可以在特定的格式下保存,則可以選擇,但如果我不這樣做,我的運氣不好。那是對的嗎? – Mathias 2010-08-26 19:38:12

+0

您的意思是97-2003格式與2007/2010格式的PowerPoint?如果是這樣,上面列出的僅是2007/2010。它*可能*有可能與之前做一些事情,我沒有嘗試過。但是二進制PowerPoint格式規範位於:http://msdn.microsoft.com/en-us/library/cc313106(office.12).aspx。 – 2010-08-26 19:51:53

+0

我的不好,我沒有完全理解你的觀點 - 我認爲你的方法需要先用不同的擴展名保存文件。我試過System.IO.Packaging,它直接打開一個pptx文件,並提供對各個部分的訪問。儘管如此,關於2007年以前的文件的警告是一個很好的方法。 – Mathias 2010-08-27 03:16:33

相關問題