2012-04-05 26 views
0

我正在設計一個C#應用程序,它將打開PowerPoint演示文稿,將帶有動畫的幻燈片分成不同的幻燈片,然後將整個演示文稿導出爲一系列JPG圖像。我正在使用Visual Studio 2010和Microsoft Office 2010.從外部C#應用程序中自動執行PowerPoint VBA加載項

該項目以PPspliT爲中心,這是一個VBA宏和插件,是另一位開發人員親切地提供的,並且工作得非常好! (謝謝!)本質上,我正在尋找使用外部C#應用程序(而不是另一個宏或Office加載項)自動化此加載項。我目前的代碼是基於a helpful example from Microsoft。如果PowerPoint文件轉換包含PPspliT_main宏,使用時像這樣的例子中的RunMacro功能工作得很好:

RunMacro(oPP, new Object[]{"'pres1.ppt'!PPspliT_main"});

然而,如果宏沒有在PowerPoint文件保存本身, RunMacro函數的代碼會拋出TargetInvocationException,因爲宏不存在(即使安裝了加載項)。我希望能夠利用加載項的功能,以便可以對任何PowerPoint文件進行操作,而不僅僅是將宏保存在其中的宏文件。我會想象有一個簡單的方法來實現這一點。

類似於Application.CommandBars.ExecuteMso("Copy")的函數看起來就像是我所需要的,但從我讀過的內容來看,它聽起來像只有內置函數具有idMso,而不是自定義函數(就像這樣)。這是真的?或者,也許我需要編輯PPspliT宏代碼來「暴露」它以便從我的C#應用​​程序調用它?

我已經做了大量的搜索解決方案,並且發現了許多與我正在尋找的相似的文章/帖子,但它們看起來都不相同,以至於它們不適合我的情況。我是使用宏/插件的新手,所以我的術語/理解也可能有點偏離。

任何指導,將不勝感激。在此先感謝您的幫助!

+0

您是否嘗試過使用PPspliT_main而不是pres1.ppt'!PPspliT_main作爲最後一個參數?包含pres1.ppt會告訴PowerPiont專門在該文件中查找宏,而只詢問宏名稱應該允許您調用在加載的加載項中定義的任何Public子項或函數。 – 2012-04-06 14:56:29

+0

@SteveRindsberg啊哈,明白了!現在你指出了,這是非常有意義的(事後看來,這是非常明顯的)。在我的實際代碼中,我的文件名是從一個變量中提取的,而不是僅僅編寫pres1.ppt。但我不知道那裏的文件名不是必需的。非常感謝你的幫助。您是否介意在回覆中重新發布您的評論,以便我可以解決該問題並使其得到提升? (我假設即使我是StackOverflow的新手,我可以讓別人回答我自己的問題?) – Aaron 2012-04-06 20:47:27

+0

很高興幫助。我轉發了它作爲答案(猶豫不決,因爲我不完全確定它會工作...只有95%) – 2012-04-07 17:43:55

回答

0

您需要使用PPspliT_main而不是pres1.ppt'!PPspliT_main作爲最後一個參數。

包括pres1.ppt告訴PowerPoint在該文件中專門查找宏,而只詢問宏名稱應該允許您調用在加載的加載項中定義的任何Public子項或函數。