首页 文章

分发xlwings驱动的Excel文件 . 'ActiveX component can' t创建对象'错误

提问于
浏览
0

我有一个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 回答

  • 0

    正如Phillip在评论部分中所建议的那样,可靠的解决方法是将以下VBA代码添加到“ThisWorkbook”模块中:

    Private Sub Workbook_Open()
    Application.CalculateFull
    End Sub
    

    一旦打开工作簿,它就会启动完整的重新计算 . 尽管如此,如果xlwings顺利工作而没有任何修改,那将会很棒 . 在我看来,这样一个伟大的软件包,阻止它被广泛采用的唯一因素就是分发问题 .

    不幸的是,我不能赞成Phillip的评论,不能不够感谢他 .

相关问题