MATLAB ActiveX 与 Python Win32COM

MATLAB ActiveX vs. Python Win32COM

我正在尝试将我在 Python 中创建的程序迁移到 MATLAB。此应用程序使用 win32COM 到 write/read to/from Excel 和 PowerPoint,我假设 ActiveX 命令非常 similar/identical 因为它基于 VBA。如果有人能阐明这一点并帮助解决以下错误,我将不胜感激!!

所以我有一个 Python 有效的代码

PPT_App = win32com.client.Dispatch("PowerPoint.Application")
Presentation = PPT_App.Presentations.Add()
Cover_Slide = Presentation.Slides.Add(1,12)

然而,当我将其转换为 MATLAB 时;

PPT_App = actxserver('PowerPoint.Application');
Presentation = PPT_App.Presentations.Add();
Cover_Slide = Presentation.Slides.Add(1,12);

它在定义 'Cover_Slide';

的第 3 行给我这个错误
Undefined function 'Add' for input arguments of type 'Interface.91493469_5A91_11CF_8700_00AA0060263B'.

有谁知道为什么会这样,或者我在哪里可以找到有关 ActiveX 差异的信息?

它们不是基于 VBA;相反,它是相反的,你可以在 VBA 中做任何事情,你也可以用 ActiveX 做(特别是,你可以用 VBA 做的,你也可以用 MATLAB 做),但是 COM 对象公开的方法和属性是这些方法和属性的 超集 (因此 win32com 让您更进一步)。

您在这里看到的是,无论出于何种原因,Slides COM 对象都有一个名为 Add 的方法,该方法无法通过 ActiveX 使用。不过,您所拥有的是一个几乎同义的方法,称为 AddSlide which you can use in MATLAB. The only difference between the two is in the second parameter; Add takes a value in the PpSlideLayout enum (with the value of 12 corresponding to a blank slide), where AddSlide expects a CustomLayout, which you can create through Presentation.SlideMaster。具体来说,因为在我的例子中 "blank slide" 恰好是第七个可用布局(当在 "New slide" 下拉列表中计算时),你可以做的是

Presentation = PPT_App.Presentations.Add();
Layout = Presentation.SlideMaster.CustomLayouts.Item(7)
Presentation.Slides.AddSlide(1, Layout)

一般来说,请参阅 VBA 文档以了解通过 MATLAB 可以实现的功能。根据我的经验,这与一般 COM 对象之间的差异是有限的。