我有一个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轮子,用'pip install [filename] .whl'安装它们 . 安装了xlwings('pip install xlwings') . 此安装的总大小为50Mb .
-
创建了一个安装了xlwings模块的新文件('xlwings quickstart myproject --standalone') . 将'_xlwings.conf'表重命名为'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文件?
1 回答
正如Phillip在评论部分中所建议的那样,可靠的解决方法是将以下VBA代码添加到“ThisWorkbook”模块中:
一旦打开工作簿,它就会启动完整的重新计算 . 尽管如此,如果xlwings顺利工作而没有任何修改,那将会很棒 . 在我看来,这样一个伟大的软件包,阻止它被广泛采用的唯一因素就是分发问题 .
不幸的是,我不能赞成Phillip的评论,不能不够感谢他 .