py2exe & win32 OLEObject 错误

py2exe & win32 OLEObject error

我试图用 py2exe 将我的程序编译成 exe。不幸的是,当我使用 win32com 从 Excel 复制图表并使用 (Shapes.PasteSpecial(ppPasteOLEObject) 将它们嵌入到 PowerPoint 中时,我经常收到此错误:

File "win32com\client\__init__.pyc", line 170, in __getattr__
AttributeError: ppPasteOLEObject`.

谷歌搜索并没有真正帮助。当我 运行 它在 python 中时,该脚本完美运行,所以我知道问题出在 win32com 上。使用 makepy.py 来包含类型库也没有帮助,但也许我的 setup.py 是错误的。所以这里是:

import sys
from distutils.core import setup
import py2exe
from glob import glob
from os.path import normpath
import matplotlib

sys.setrecursionlimit(5000)
data_files=[("Microsoft.VC90.CRT",glob(normpath(
    r'C:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT/*.*'))),
    ("images",glob(normpath("images/*.PNG"))),
    ("ppttemplate",glob(normpath("ppttemplate/*.pptx")),
    (".",normpath("C:/windows/system32/ole32.dll")),
    (".",normpath("C:/Anaconda2/envs/py27/Library/bin/MSVCP90.dll")))
    ]
data_files.extend(matplotlib.get_py2exe_datafiles())

setup(
    data_files=data_files,
    console=['Main.py'],
    options={"py2exe":{"includes":["lxml.etree","lxml._elementpath","gzip",
                       "sip","PyQt4.QtGui","PyQt4.QtCore","matplotlib"],
                       "excludes":["Tkinter"],
                       "typelibs":[('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 8),
                                   ('{00020430-0000-0000-C000-000000000046}', 0, 2, 0)]
                                   }
                                   }
                                   )

在此先感谢您的帮助!

知道了!只需要包含相关的 dll 并设置 skip_archive=True...(我包含了 py2exe 抱怨的所有内容)。

通过添加:

sys.path.append("C:\Program Files\Microsoft VisualStudio9.0\VC\redist\x86\Microsoft.VC90.CRT")
sys.path.append("C:\windows\system32")

data_files 行之前并将所有 system32 添加到 data_files 并在 py2exe: 中添加 skip_archive=True 它起作用了! 希望它也能在不同的计算机上运行...

我用的向导在[py2exe](http://www.py2exe.org/index.cgi/IncludingTypelibs)的网站上!