分发由 xlwings 驱动的 Excel 文件。 “ActiveX 组件无法创建对象”错误
Distributing xlwings-powered Excel files. 'ActiveX component can't create object' error
我有一个 Excel 文件,它严重依赖于 python (xlwings) 中编程的 UDF。它在 python 与加载项一起安装的 PC 上运行得很好。问题是我必须将文件发送给一群甚至不知道 python 是什么的人。由于 UDF,冻结的可执行文件是不可能的。
所以我做了什么:
从 python.org 下载了可嵌入的 python 安装(Windows x86 可嵌入的 zip 文件),将其解压缩到 xlsm 文件所在的文件夹(在名为 'Python').
的单独文件夹
从 bootstrap.pypa.io 下载 get-pip.py,取消注释文件 python36._pth 中的行 'import site',运行 'python get.pip.py'.
从 Christoph Gohlke 的很棒的站点下载了 pywin32 和 comtypes wheels,并使用 'pip install [filename].whl' 安装了它们。安装 xlwings ('pip install xlwings')。此安装的总大小为 50Mb。
创建了一个安装了 xlwings 模块的新文件 ('xlwings quickstart myproject --standalone')。将 '_xlwings.conf' sheet 重命名为 'xlwings.conf',在 'Interpreter' 字段中输入以下公式:
=LEFT(CELL("filename";A1);FIND("[";CELL("filename";A1))-1) & "Python\pythonw.exe"
无论文件在哪里打开,它都会自动计算 python 解释器的正确路径。
宏和 UDF 似乎可以正常工作,但每次我打开文件时,所有 UDF 公式都会抛出“ActiveX 组件无法创建对象”错误。如果我强制重新计算 ([CTRL]-[ALT]-[SHIFT]-F9) 一切都会重新开始工作,但我不能指望我的最终用户会知道如何执行此操作。是否有使 UDF 开箱即用的技巧?或者也许有更方便的方法来分发 xlwings 驱动的 Excel 文件?
正如 Phillip 在评论部分所建议的那样,可靠的解决方法是将以下 VBA 代码添加到 'ThisWorkbook' 模块:
Private Sub Workbook_Open()
Application.CalculateFull
End Sub
一旦打开工作簿,它就会启动一次完整的重新计算。尽管如此,如果 xlwings 在没有任何修补的情况下顺利运行,那就太好了。这么棒的一个包,在我看来,唯一阻止它被广泛采用的是分发问题。
不幸的是,我无法对 Phillip 的评论投赞成票,对他感激不尽。
我有一个 Excel 文件,它严重依赖于 python (xlwings) 中编程的 UDF。它在 python 与加载项一起安装的 PC 上运行得很好。问题是我必须将文件发送给一群甚至不知道 python 是什么的人。由于 UDF,冻结的可执行文件是不可能的。 所以我做了什么:
从 python.org 下载了可嵌入的 python 安装(Windows x86 可嵌入的 zip 文件),将其解压缩到 xlsm 文件所在的文件夹(在名为 'Python').
的单独文件夹
从 bootstrap.pypa.io 下载 get-pip.py,取消注释文件 python36._pth 中的行 'import site',运行 'python get.pip.py'.
从 Christoph Gohlke 的很棒的站点下载了 pywin32 和 comtypes wheels,并使用 'pip install [filename].whl' 安装了它们。安装 xlwings ('pip install xlwings')。此安装的总大小为 50Mb。
创建了一个安装了 xlwings 模块的新文件 ('xlwings quickstart myproject --standalone')。将 '_xlwings.conf' sheet 重命名为 'xlwings.conf',在 'Interpreter' 字段中输入以下公式:
=LEFT(CELL("filename";A1);FIND("[";CELL("filename";A1))-1) & "Python\pythonw.exe"
无论文件在哪里打开,它都会自动计算 python 解释器的正确路径。
宏和 UDF 似乎可以正常工作,但每次我打开文件时,所有 UDF 公式都会抛出“ActiveX 组件无法创建对象”错误。如果我强制重新计算 ([CTRL]-[ALT]-[SHIFT]-F9) 一切都会重新开始工作,但我不能指望我的最终用户会知道如何执行此操作。是否有使 UDF 开箱即用的技巧?或者也许有更方便的方法来分发 xlwings 驱动的 Excel 文件?
正如 Phillip 在评论部分所建议的那样,可靠的解决方法是将以下 VBA 代码添加到 'ThisWorkbook' 模块:
Private Sub Workbook_Open()
Application.CalculateFull
End Sub
一旦打开工作簿,它就会启动一次完整的重新计算。尽管如此,如果 xlwings 在没有任何修补的情况下顺利运行,那就太好了。这么棒的一个包,在我看来,唯一阻止它被广泛采用的是分发问题。
不幸的是,我无法对 Phillip 的评论投赞成票,对他感激不尽。