0

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

该项目以PPspliT为中心,这是另一个开发人员慷慨提供的 VBA 宏和插件,并且运行良好!(谢谢!)本质上,我希望使用外部 C# 应用程序(而不是另一个宏或 Office 加载项)自动执行此加载项。我当前的代码基于Microsoft 的一个有用示例。如果要转换的 PowerPoint 文件包含PPspliT_main宏,RunMacro则示例中的函数在这样使用时可以正常工作:

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

但是,如果宏未保存在 PowerPoint 文件本身中,则RunMacro函数的代码会抛出 a TargetInvocationException,因为宏不存在(即使安装了加载项)。我希望能够利用加载项的功能,以便可以操作任何 PowerPoint 文件,而不仅仅是其中保存了宏的文件。我想有一种简单的方法可以做到这一点。

一个类似于 的函数Application.CommandBars.ExecuteMso("Copy")似乎正是我所需要的,但从我读过的内容来看,听起来只有内置函数有一个 idMso,但没有自定义函数(比如这个)。这是真的?或者我可能需要编辑 PPspliT 宏代码本身以“公开”它,以便从我的 C# 应用程序中调用它?

我已经进行了大量搜索以寻找解决方案,并且发现了许多与我正在寻找的相似的文章/帖子,但它们似乎都不同,以至于它们不适用于我的情况。我是使用宏/加载项的新手,所以我的术语/理解也可能有点偏离。

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

4

1 回答 1

0

您将要使用PPspliT_main而不是pres1.ppt'!PPspliT_main作为最后一个参数。

包括pres1.ppt告诉 PowerPoint 专门在该文件中查找宏,而仅询问宏名称应该允许您调用在加载的加载项中定义的任何公共子或函数。

于 2012-04-07T17:43:07.847 回答