1

希望你能帮助我,我问自己的第一个问题,但我总是对我在这里找到的专业答案印象深刻!

我正在使用 xlwings 从 .xls 文件中读取和写入数据。我不是一个经验丰富的程序员,我会犯错误。有时,这意味着重新启动进程、Python 等等。

时不时地,我会AttributeError在调用时收到以下信息Workbook()。真正的问题不是我不知道发生了什么(我尝试阅读错误诊断所引用的模块,但它们是在超出我技能的 Python 级别上编写的),而是重新启动甚至重新启动(!)我的笔记本电脑(总是)不能解决问题。

我希望我能提供一些关于正在发生的事情的线索,但这似乎是一个随机发生的问题,现在,三次重启和几次重启都没有解决它。谷歌也无能为力。到目前为止,我一定已经运行了我的程序一百次,而且这并不总是一个问题!错误消息,只需调用Workbook()

wb = Workbook()

Traceback (most recent call last):

File "<ipython-input-22-4a3c36eb9bf9>", line 1, in <module>
wb = Workbook()

File "C:\Program Files\Anaconda\lib\site-packages\xlwings\main.py", line 141, in __init__
self.xl_app, self.xl_workbook = xlplatform.new_workbook()

File "C:\Program Files\Anaconda\lib\site-packages\xlwings\_xlwindows.py", line 104, in new_workbook
xl_app = _get_latest_app()

File "C:\Program Files\Anaconda\lib\site-packages\xlwings\_xlwindows.py", line 88, in _get_latest_app
return xl_workbook_current.Application

File "C:\Program Files\Anaconda\lib\site-packages\win32com\client\dynamic.py", line 522, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))

AttributeError: Open.Application

作为后续,来自“dyamic.py”的一段代码引发了错误:

[...]
# If we are still here, and have a retEntry, get the OLE item
    if not retEntry is None:
        invoke_type = _GetDescInvokeType(retEntry, pythoncom.INVOKE_PROPERTYGET)
        debug_attr_print("Getting property Id 0x%x from OLE object" % retEntry.dispid)
        try:
            ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
        except pythoncom.com_error, details:
            if details.hresult in ERRORS_BAD_CONTEXT:
                # May be a method.
                self._olerepr_.mapFuncs[attr] = retEntry
                return self._make_method_(attr)
            raise
        debug_attr_print("OLE returned ", ret)
        return self._get_good_object_(ret)

    # no where else to look.
    raise AttributeError("%s.%s" % (self._username_, attr))

正如我之前提到的,最后一点对我来说太多了:P

由于一些随机错误,我关闭了一些随机窗口后,我猜想一些挥之不去的 Excel.exe(或类似)进程干扰了脚本,但我在任务管理器中找不到。此外,这是重启应该解决的问题,对吧?!我还升级到 xlwings .34(截至目前的最新版本)。

Windows 8.1 64 位,Python 2.7(Anaconda 发行版,Spyder IDE),Excel 2013。

当然,非常感谢任何帮助!

非常感谢,亲切的问候,

戈登。

编辑:

按照评论中给出的建议,我现在可以报告,即使有时wb = Workbook()失败,from win32com.client import dynamic然后是dynamic.Dispatch('Excel.Application')返回<COMObject Excel.Application>

希望能帮助到你!

4

1 回答 1

0

始终检查任何问题以打开 Excel 工作表,例如密码保护/许可问题。

如果在打开 excel 时出现任何弹出窗口,您可能会遇到同样的错误。

于 2020-07-24T15:34:48.537 回答