从外部C#应用程序自动化PowerPoint VBA加载项

时间:2012-04-05 19:23:33

标签: c# ms-office powerpoint powerpoint-vba

我正在设计一个C#应用程序,它将打开PowerPoint演示文稿,将带有动画的幻灯片拆分为单独的幻灯片,然后将整个演示文稿导出为一系列JPG图像。我正在使用Microsoft Office 2010在Visual Studio 2010中工作。

该项目以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#应用​​程序中调用它?

我已经做了大量的搜索解决方案,并且发现了许多类似于我正在寻找的文章/帖子,但它们看起来都不同,以至于它们不适用于我的情况。我刚开始使用宏/加载项,所以我的术语/理解也可能有点过时。

任何指导都将不胜感激。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您希望使用PPspliT_main代替pres1.ppt'!PPspliT_main作为最后一个参数。

包含pres1.ppt告诉PowerPoint专门查找该文件中的宏,而只要求宏名称应该允许您调用加载的加载项中定义的任何Public子句或函数。