Python 从Word.Application对象获取文档对象时,当VBSEdit能够获取其成员时,不会从gencache缓存中填充其成员

Python 从Word.Application对象获取文档对象时,当VBSEdit能够获取其成员时,不会从gencache缓存中填充其成员,python,ms-word,com,pythoncom,Python,Ms Word,Com,Pythoncom,完美地总结了我的问题(稍加修改以针对我的案例进行更新): 我希望有一个Word文档实例,包含所有方法和 交互会话期间可见的属性。这是我的现金网 附件: >>> from win32com.client import gencache, Dispatch >>> gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 1, bForDemand=True) <module

完美地总结了我的问题(稍加修改以针对我的案例进行更新):

我希望有一个Word文档实例,包含所有方法和 交互会话期间可见的属性。这是我的现金网 附件:

>>> from win32com.client import gencache, Dispatch
>>> gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 1, bForDemand=True) 
<module 'win32com.gen_py.00020905-0000-0000-C000-000000000046x0x8x1' from
'C:\DOCUME~1\osuchw\LOCALS~1\Temp\gen_py\2.3\00020905-0000-0000-C000-000000000046x0x8x1\__init__.py'>
>>> word = Dispatch('Word.Application')
>>> word 
<win32com.gen_py.Microsoft Word 12.0 Object Library._Application instance at 0x18074720>
>>> doc = word.Documents.Add()
>>> doc 
<win32com.gen_py.None.Document>
但即使在这种情况下,它仍然是
win32com.gen_py.None.Document


最奇怪的是,对象的类被识别并存在于缓存中:

>>> ad=win32com.client.gencache.EnsureDispatch("Word.Document")
>>> d = w.ActiveDocument
>>> d.__class__
<class win32com.gen_py.00020905-0000-0000-C000-000000000046x0x8x4.Document at 0x02A101B8>
>>> ad.__class__
<class win32com.gen_py.00020905-0000-0000-C000-000000000046x0x8x4._Document at 0x02A07B20>
>>> len(dir(ad.__class__))
141
>>> len(dir(d.__class__))
11
ad=win32com.client.gencache.EnsureDispatch(“Word.Document”) >>>d=w.ActiveDocument >>>d.。_类__ >>>广告类__ >>>len(主任(高级) 141 >>>len(主任(d.\U类) 11
同时,VBA编辑器和列表
w.ActiveDocument
的成员很好。他们是如何做到这一点的,为什么pythoncom不能做同样的事情呢?

d.\u dispobj\u
拥有所有成员,因此可以使用它来代替
d

眼前的问题解决了


但是我仍然不知道发生了什么。

Word 2013 VBA使用
程序文件\Microsoft Office\Office15\MSWORD.OLB
程序文件\Common Files\Microsoft Shared\Office15\MSO.DLL
。我猜前者是
Document
存在的地方。@cxw没有区别
python-m win32com.client.makepy“c:\Program Files\Microsoft Office\Office12\MSWORD.OLB”
生成与
python-m win32com.client.makepy“Microsoft Word 12.0对象库”
.32位还是64位相同的包装器?在我的系统中,
ad.CLSID
0002096B-…
而不是
00020906-…
,前者位于
HKCR\Wow6432Node
下。我可以用Office 2013 32位和Python 3.4 64位重新编程。如果您的Office和Python是不同的位宽度,请尝试使用与Office相同宽度的Python,看看是否有帮助?@cxw Office和Python都是32位的。Office 2007和Python 2.7.13以及pywin32-221。
import win32com.client.selecttlb    
ii=win32com.client.selecttlb.EnumTlbs()
ii=[i.desc for i in ii]
# one typelib - "Visual Basic runtime objects and procedures [6.0]" - produced an error
for i in ii: subprocess.call(['python','-m','win32com.client.makepy',i])
>>> ad=win32com.client.gencache.EnsureDispatch("Word.Document")
>>> d = w.ActiveDocument
>>> d.__class__
<class win32com.gen_py.00020905-0000-0000-C000-000000000046x0x8x4.Document at 0x02A101B8>
>>> ad.__class__
<class win32com.gen_py.00020905-0000-0000-C000-000000000046x0x8x4._Document at 0x02A07B20>
>>> len(dir(ad.__class__))
141
>>> len(dir(d.__class__))
11