0

我发现 xlwings 是一个非常出色的项目,可以作为 Excel 和 Python 之间的桥梁。所以我将它应用到我的 excel 插件开发中。

但我遇到了一些问题。

当excel插件调用python模块时,Workbook.caller()不返回Workbook对象(插件工作簿本身)!只是错误!

我没有使用 Workbook.caller(),而是使用通过“当前 ActiveWorkbook 的名称”传递的“Workbook()”。但在那种情况下,恐怕'Optimize_connection = true'可能会引发内存垃圾问题!

(如果 VBA 中的 'IsAddin' 属性关闭,那么它运行得很好)

有没有人可以帮助我?

先感谢您。

4

2 回答 2

0

我没有对此进行测试,但解决方案可能就像使用 xlwings VBA 模块作为插件时ThisWorkbook替换一样简单。ActiveWorkbook无论如何,我已经创建了一个问题来解决这个问题:https ://github.com/ZoomerAnalytics/xlwings/issues/153

于 2015-02-16T22:17:52.450 回答
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:

  • 带有 Excel 2013 的 Windows 8.1
  • OS X 10.10 (Yosemite) 与 Excel for Mac 2011
于 2016-01-21T18:57:12.527 回答