【问题标题】:MATLAB ActiveX vs. Python Win32COMMATLAB ActiveX 与 Python Win32COM
【发布时间】:2018-07-19 13:06:50
【问题描述】:

我正在尝试将我在 Python 中创建的程序迁移到 MATLAB。此应用程序使用 win32COM 向 Excel 和 PowerPoint 写入/读取/读取,我假设 ActiveX 命令非常相似/相同,因为它基于 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 差异的信息?

【问题讨论】:

    标签: python matlab powerpoint activex win32com


    【解决方案1】:

    它们不是基于 VBA;相反,它是相反的,你可以在 VBA 中做的任何事情,你都可以用 ActiveX 来做(特别是你可以用 VBA 做的事情,你也可以用 MATLAB 做),但是由COM 对象是其中的一个超集(这样win32com 会让你更进一步)。

    您在这里看到的是,无论出于何种原因,Slides COM 对象都有一个名为Add 的方法,该方法不能通过 ActiveX 使用。但是,您所拥有的是一个几乎同义的方法,称为 AddSlide,您可以在 MATLAB 中使用它。两者的唯一区别在于第二个参数; Add 在PpSlideLayout enum 中取值(值12 对应于空白幻灯片),其中AddSlide 需要CustomLayout,您可以通过Presentation.SlideMaster 创建它。具体来说,因为在我的情况下,“空白幻灯片”恰好是第七个可用布局(在“新幻灯片”下拉列表中计算时),你可以做的是

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

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

    【讨论】:

    • 非常感谢您的解释!!
    • 不客气。也许有趣的是,这种差异意味着 Add 在 VBA 中有效,但只有 AddSlide 会自动完成。
    • 您好,您可以帮我做点别的吗?我找不到很多关于这个主题的文档。我正在尝试按名称检索工作表,例如 'Summary = wb.Sheets('Status color chart')' 但我收到索引超出矩阵尺寸的错误。我知道如何通过索引获取工作表,但我无法通过名称获取它!
    • @SHK:在 MATLAB 中,你的意思是?如果是这样,您可能只需要这样做wb.Sheets.Item('Status color chart')。
    • win32com 为这些对象生成默认方法(以便Sheets._Default 和Sheets.__call__ 最终转换为Item);您可能会发现调查win32com 和makepy.py(或xl = win32com.client.gencache.EnsureDispatch('Excel.Application'))自动生成的源代码很有启发性。
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多