1

あなたが私を助けてくれることを願っています, 私は自分自身に最初の質問をします.

xlwings を使用して、.xls ファイルからデータを読み書きしています。私はベテランのプログラマーではなく、間違いを犯します。ときどき、これはプロセス、Python などを再起動することを意味します。

AttributeError時々、を呼び出すと次のようになりますWorkbook()。本当の問題は、何が起こっているのか手がかりがないことではありません (エラー診断が参照するモジュールを読んでみましたが、それらは私のスキルを超えたレベルの Python で書かれています)。 (!) 私のラップトップは (常に) 問題を解決しません。

何が起こっているのか手がかりを提供できればと思いますが、ランダムに発生する問題のようで、現在、3回の再起動と数回の再起動では修正されませんでした. グーグルも助けにはなりません。これまでにプログラムを 100 回実行したに違いありませんが、常に問題になるわけではありません。単に呼び出したときのエラーメッセージ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()コメントで与えられたアドバイスに従って、失敗した場合でも、 return が続くfrom win32com.client import dynamicことを報告できるようになりました。dynamic.Dispatch('Excel.Application')<COMObject Excel.Application>

それが役に立てば幸い!

4

1 に答える 1