近期在Python中使用xlwings模块(以下简称xlw)为Excel解析数据,遇到两则关于xlw的小问题,因为解决了所以记下来备忘.
使用pip-review更新了所有Python模块之后,发现启动Excel时xlwings插件还是没有更新版本
并且提示找不到上一个版本的DLL了, 为什么?
原因: 更新python模块之后,原来路径中的DLL换版本了,其文件名也变了. 但是Excel自动加载插件的路径"C:Users用户名AppDataRoamingMicrosoftExcelXLSTART" 下面的xlwings.xlam没有更新,它存储的还是访问上个版本的文件名信息. Excel启用加载这个文件之后, 找原来的DLL已经找不到了.
解决办法: 从"C:Program FilesPython38Libsite-packagesxlwingsaddin" 复制一个同名文件放到上述目录下,再重新启动Excel就好了. 这种方法的好处是启动Excel时会自动加载这个插件库. 还有一种方法, 这个xlwings.xlam不放在Excel启动自动加载的目录下(删掉这个目录下的xlwings.xlam), 并在VBA的"引用"的库中,将xlwings模块指向"C:Program FilesPython38Libsite-packagesxlwingsaddinxlwings.xlam", 因为模块更新时会自动更新到这个目录中的文件.
当然,由于你选择的Python安装目录可能与上面提到的不一样,你随机应变调整就好.
在某台电脑上,无法顺利导入python代码中的自定义函数或过程到Excel中来.
这个问题困扰了我几个月时间,一开始以为是Python版本问题,或者是Office版本问题,但试验多次都没有解决. 今天发现0.20.4可以安装不带密码的xlwings.xlam, 再次尝试,发现可以调试这个加载宏了,原来代码竟然停留在以下代码的最后一句:
根据tf字串的内容,可以找到这个文件,虽然没有后缀但可以正常打开,是一个完整的待导入的VBA代码模块,这就说明前面的代码运行是正常的.只是没有成功导入.
这次错误信息是"不能信任到VBA Project的连接", 错误码1004, 这就有点眼熟了, 原来是安全设置阻碍了VBA代码来导入代码模块, 是个安全问题而不是代码问题. 于是网上查找一下解决办法,很快就搞定了.
解决办法:通过"宏安全性:按钮,点击进入"信任中心",设置"启用所有宏"且勾选"信任对VBA工程对象模型的访问(V)", 保存再启动Excel,导入UDFs的问题就非常顺畅解决了.
备注:这个错误其实不应该犯,我早就知道VBA的这个安全问题,只是忘记了xlwings导入时也是通过VBA来写入VBA代码,而碰巧这个设置选项又一直没有开启.