【问题标题】:python win32com Attribute Error in constantspython win32com 常量中的属性错误
【发布时间】:2018-06-23 17:57:59
【问题描述】:

我尝试使用win32com Python 库进行编程以处理 PowerPoint 文件。但是,当我通过以下方式将常量传递给函数时,

new_pre.ExportAsFixedFormat(options.output,
                            win32com.client.constants.ppFixedFormatTypePDF,
                            win32com.client.constants.ppFixedFormatIntentPrint,
                            win32com.client.constants.msoFalse,
                            win32com.client.constants.ppPrintHandoutHorizontalFirst,
                            win32com.client.constants.ppPrintOutputSixSlideHandouts,
                            win32com.client.constants.msoFalse,
                            win32com.client.constants.ppPrintAll,
                            False,
                            False,
                            False,
                            False,
                            PrintRange=None
                            )

它引发AttributeError

Traceback (most recent call last):
  File "D:/SharedDocuments/DokyPpf/main.py", line 40, in <module>
    win32com.client.constants.msoFalse,
  File "C:\Users\xxx\AppData\Local\Programs\Python\Python36\lib\site-packages\win32com\client\__init__.py", line 178, in __getattr__
    raise AttributeError(a)
AttributeError: msoFalse

请注意,有一个similar question 以及可以使用的解决方案

EnsureDispatch("PowerPoint.Application")

而不是

Dispatch("")

但是,我已经使用了EnsureDispatch("PowerPoint.Application"),它仍然无法正常工作...

Here is the link对应VBA的API引用。

【问题讨论】:

  • happs = win32com.client.Dispatch("PowerPoint.Application")您无法访问您指定的服务,
  • @dsgdfg 我用app=win32com.client.EnsureDispatch("PowerPoint.Application"),有什么问题吗?
  • 在学会走路之前不要开始飞行!尝试正常(GUI)并查看错误,然后使用代理。
  • 试试 www.pptxbuilder.com?

标签: python com ms-office powerpoint win32com


【解决方案1】:
 __import__('win32com.gen_py', globals(), locals(), ['2DF8D04C-5BFA-101B-BDE5-00AA0044DE52x0x2x8'], 0)

此文件不会自动加载。

【讨论】:

    【解决方案2】:

    在运行EnsureDispatch时,win32com会自动生成与感兴趣的类型库对应的Python代码。

    根据您的环境,Python 模块将位于 C:\Users\username\AppData\Local\Temp\gen_py\3.6 附近的某个位置,模块按您为其生成代码的类型库的 CLSID 分组。

    对于 PowerPoint 2016,您会发现一个名为 91493440-5A91-11CF-8700-00AA0060263B 的文件夹,其 __init__.py 包含所有生成的常量,包括例如ppFixedFormatTypePDF.

    现在,值得注意的是,包含msoFalseMsoTriState 枚举不是 PowerPoint 类型库的一部分,这就是您看到AttributeErrors 的原因。

    quick look at the documentation 中,我们发现枚举是核心Office 库的一部分,包含在mso.dll 中。再次根据您的设置、您使用的 Office 版本以及它所针对的架构,您应该能够通过在注册表编辑器中搜索 HKEY_CLASSES_ROOT 来挖掘其 ID:

    在这里,我们注意到类型库的 CLSID 为 {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52},版本号为 2.8。知道这一点,可能是为库生成代码以及因此丢失的常量的最简单方法是通过win32com.client.gencache.EnsureModule('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 8)

    In [16]: win32com.client.constants.msoFalse
    AttributeError: msoFalse
    
    In [17]: win32com.client.gencache.EnsureModule('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 8)
    Out[17]: <module 'win32com.gen_py.2DF8D04C-5BFA-101B-BDE5-00AA0044DE52x0x2x8' from 'C:\\Users\\username\\AppData\\Local\
    \Temp\\gen_py\\3.6\\2DF8D04C-5BFA-101B-BDE5-00AA0044DE52x0x2x8.py'>
    
    In [18]: win32com.client.constants.msoFalse
    Out[18]: 0
    

    现在,知道msoFalse 转换为 0,您当然也可以跳过整个过程,将所有出现的常量替换为 0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 2012-03-15
      • 2023-03-24
      • 2019-01-12
      • 1970-01-01
      • 2022-07-21
      • 2013-10-20
      • 1970-01-01
      相关资源
      最近更新 更多