0

xlwings は、Excel と Python の架け橋として非常に優れたプロジェクトであることがわかりました。だから私はそれを私のExcelアドイン開発に適用しています。

しかし、私はいくつかの問題を抱えています。

Excel アドインが python モジュールを呼び出すと、 Workbook.caller() は Workbook オブジェクト (アドイン ブック自体) を返しません! ただのエラー!

Workbook.caller() の代わりに、「現在の ActiveWorkbook の名前」を渡す「Workbook()」を使用します。しかし、その場合、'Optimize_connection= true' がメモリ ガベージの問題を引き起こす可能性があります。

(VBA の「IsAddin」プロパティがオフの場合、非常にうまく動作します)

私を助けてくれる人はいますか?

前もって感謝します。

4

2 に答える 2

0

Python コードを呼び出している Excel アドインを取得するための回避策を次に示します。

import mock
import platform
import xlwings
from   xlwings import Workbook

def get_add_in():
    if platform.system() == 'Windows':
        # Workbook.caller crashers instead of returning the add-in
        get_add_in_caller_on_windows()
    else:
        return Workbook.caller()

@mock.patch('xlwings.Sheet.active')
def get_addin_caller_on_windows(mock_active):
    # The xlwings.Sheet.active method is mocked because the add-in has no
    # active worksheet.
    xl_app = xlwings.xlplatform.get_xl_apps()[0]
    return Workbook(xl_workbook=xl_app.ThisWorkbook)

Python 3.4 および xlwings 0.6.4 で動作します:

  • Windows 8.1 と Excel 2013
  • OS X 10.10 (Yosemite) と Excel for Mac 2011
于 2016-01-21T18:57:12.527 に答える
0

私はこれをテストしていませんが、解決策はxlwings VBA モジュールをアドインとして使用する場合にThisWorkbook置き換えるのと同じくらい簡単かもしれません。ActiveWorkbookとにかく、これを解決するために問題を作成しました: https://github.com/ZoomerAnalytics/xlwings/issues/153

于 2015-02-16T22:17:52.450 に答える