我在Python2.6上安装了comtype 0.6.2。如果我试试这个:
import comtypes.gen我得到:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
import comtypes.gen
ImportError: No module named gen然而,像import comtypes和import comtypes.client这样的其他进口产品工作得很好。
我做错了什么?
从名字上看,comtypes.gen是生成代码的吗?如果是的话,我是否需要在进口前采取某些准备步骤?我不是以管理员身份登录的。这会导致代码生成失败吗?
编辑:上面的问题是用reload(comtypes.gen)解决的(不过,我不明白如何解决)。然而,现在from comtypes.gen import IWshRuntimeLibrary不起作用。此符号应是生成代码的一部分。那么,如何生成这些代码呢?
发布于 2010-10-10 14:24:57
经过几次实验,我找到了解决办法。
我发现:
导入subpackage.
"MyComLib".的
comtypes.client自动创建comtypes.gen comtypes.gen comtypes.client.GetModule("MyComLib"),为因此,下面的代码为我完成了这个任务:
import os
import glob
import comtypes.client
#Generates wrapper for a given library
def wrap(com_lib):
try:
comtypes.client.GetModule(com_lib)
except:
print "Failed to wrap {0}".format(com_lib)
sys32dir = os.path.join(os.environ["SystemRoot"], "system32")
#Generate wrappers for all ocx's in system32
for lib in glob.glob(os.path.join(sys32dir, "*.ocx")):
wrap(lib)
#Generate for all dll's in system32
for lib in glob.glob(os.path.join(sys32dir, "*.tlb")):
wrap(lib) 包装了相关的COM库之后,现在我就可以访问IWshRuntimeLibrary了。
发布于 2010-10-10 01:55:16
也许,正如它所说的,comptype中的package包并不存在。检查您的站点-packages文件夹( C:\Python26 26\Lib\site- Windows上的软件包,用安装目录替换C:\Python26 26)来代替comtype\gen子文件夹。
发布于 2019-01-11 18:12:20
最近,我得到了新的办公室,我不得不扩展@弗雷德里克的脚本,以再次生成所有的office对象。
import os
import glob
import comtypes.client
# You may want to change the office path
msoffice=r'C:\Program Files (x86)\Microsoft Office\root\Office16'
#Generates wrapper for a given library
def wrap(com_lib):
try:
comtypes.client.GetModule(com_lib)
except:
print("Failed to wrap {0}".format( com_lib))
sys32dir = os.path.join(os.environ["SystemRoot"], "system32")
#Generate wrappers for all ocx's in system32
for lib in glob.glob(os.path.join(sys32dir, "*.ocx")):
wrap(lib)
#Generate for all dll's in system32
for lib in glob.glob(os.path.join(msoffice, "*.tlb")):
wrap(lib)
for lib in glob.glob(os.path.join(msoffice, "*.olb")):
wrap(lib)
# And a special case for Excel
excel=os.path.join(msoffice,"excel.exe")
wrap(excel)https://stackoverflow.com/questions/3898670
复制相似问题