我尝试用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参考。
答案 0 :(得分:0)
__import__('win32com.gen_py', globals(), locals(), ['2DF8D04C-5BFA-101B-BDE5-00AA0044DE52x0x2x8'], 0)
此文件不会自动加载。
答案 1 :(得分:0)
当您运行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
。
现在,值得注意的是,包含MsoTriState
的{{1}}枚举不是PowerPoint类型库的一部分,这就是您看到msoFalse
的原因。
从quick look at the documentation,我们发现枚举是AttributeError
中包含的核心Office库的一部分。再次依赖于您的设置,您正在使用的Office版本以及它所针对的架构,您应该能够通过在注册表编辑器中搜索mso.dll
来挖掘其ID:
在这里,我们注意到类型库的CLSID为HKEY_CLASSES_ROOT
,版本号为2.8。知道了这一点,也许是生成库代码的最简单方法,也就是缺少的常量,是{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
:
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
转换为0,当然,您也可以跳过整个过程,并用0替换所有出现的常量。