如何在WPS中使用xlwings的全功能
如何在WPS中使用xlwings的全功能
本文将详细介绍如何在WPS中使用xlwings库的完整功能,包括创建项目、使用自定义函数等。对于需要在WPS中使用xlwings的用户来说,具有很高的实用价值。
在WPS中使用xlwings需要进行一些特定的设置。以下是详细的步骤:
1. 安装VBA for WPS
需要专门安装一个VBA for WPS的软件包。可以通过百度搜索后进行安装。安装完成后,就可以在WPS中使用VBA。
2. 将WPS设置为多组件模式
点击左上角的WPS,然后进入设置。将"切换窗口管理模式"设置为"多组件模式"。如果不设置这个选项,在WPS中不能使用xlwings直接定位一个已经打开的表格,例如wb=xw.Book('a.xlsx')
(其中a.xlsx 已经通过WPS打开)。
3. 关闭沙盒保护
在设置页面中,默认是打开沙盒保护状态,需要关闭。如果开启了沙盒保护,一些VBA的代码会提示拒绝的权限,特别是xlwings生成项目时自动生成的表格和插件中用到的VBA代码。
4. 添加VB项目访问信任
在工具页签中点击宏安全性,弹出窗口后,点击"可靠发行商",然后勾选"信任对于“Visual Basic 项目”的访问"。这个设置和在Excel中的信任中心--宏设置--信任对VBA工程对象模型的访问功能一致。如果不设置信任,同样xlwings注入的VBA代码会报错(无法使用注入自定义函数)。
5. 设置WPS信任宏文件
点击左上角的文件--选项,信任中心---勾选"启用宏后自动添加为受信任的文档"。这一步主要是不用每次点开表格后,都去点击启用宏。
6. 安装xlwings插件到WPS中
运行命令行工具,输入:
xlwings addin install
就会自动在WPS的安装路径里多了一个xlwings.xlam。文件的路径通常是:C:\Users\dearj\AppData\Local\Kingsoft\WPS Office\12.1.0.17133\office6\startup\xlwings.xlam
。可以用everything去搜索对应的文件,找到地址。
7. 在WPS中加载xlwings插件
点击工具--加载项--浏览--找到刚才xlwings.xlam的路径,点击打开,就会自动加载xlwings的插件。之后每次打开WPS的表格时,都会加载了。加载后的效果是会在页签中多一个xlwings的页签。
以上为基本软件设置,只需设置一遍即可。截图中的表格可以随便打开一个用来设置即可。为了能在xlwings项目中使用自定义函数,还需要一个步骤。
首选我们先创建一个xlwings的项目。可以在命令行中输入:
xlwings quickstart myproject
此时会在当前目录中新增一个myproject的文件夹,其中有一个myproject.xlsm的文件,打开它。打开后找到xlwings的页签,先设置一下选框的值,填完后按enter确认。
xlwings页签的设置
- Run main : 点击后,会运行项目同名python文件的main函数
- interpreter : 如果没有安装过anaconda,只安装过python,那么把python文件的全路径,包含exe的填入,如果是anaconda的则不用填写
- PYTHONPATH : 如果项目的表格和python文件不在同一个目录,则需要填写(只填写对应的文件夹路径就行),因为我们是通过xlwings的命令创建的项目,对应的py文件和表格在同一个目录中,则无需填写。
- Add workbook to PYTHONPATH 这个为默认勾选状态的,无需变更
- Conda Path : 如果是安装了anaconda的,则需要填写anaconda的文件夹路径,无需填写到python.exe
- Conda Env : conda环境的选择,一般没有设置过专门的虚拟环境的话,填写base即可。(填写完都需要点击enter键生效)
- import functions : 点击后可以将项目对应的同名python文件中的自定义函数和宏等内容导入到VBA的模块中,这样就能直接在表格中使用python中填写的函数和宏了。
每次点击import functions,VBA中的模块:“xlwings_udfs” 内容都会被刷新,因此不要把自己的代码填写到这边(会被覆盖)。注意每次点击“import functions”后,还是会有一个报错提示,如果你已经按照我上面的设置,设置过了,则无需关注,程序还是能正常运行。(原因是python调用vba写VBA代码的com函数有报错)
注意这边代码的第二行,#Const App = "Microsoft Excel" 'Adjust when using outside of Excel
原来这边的app值为"Microsoft Excel",这样在下面走if语句时,就会走带有Application.Caller 参数的XLPY.CallUDF函数,目前这个有bug,如果不修改的话会有问题
因此我将app的值修改了,只要不等于"Microsoft Excel"就行,这样就不会在传递数据时,传入Application.Caller
每次import functions 之后,都修改一下这个app的值,就能使用自定义函数(可能可以在python文件中做一次性设置,后面再看看怎么改,目前先用了这个临时方法) - UDF modules : 如果项目中有多个py文件中都写了代码,都需要被导入时,需要填写,填写时不带.py的后缀的文件名称即可,无需填写完整路径(路径在PYTHONPATH设置了),多个文件之间用英文分号分隔。因为我们的python文件和表格名称同名,且只有一个python,则无需填写
- Debug UDFs : 好像勾选了之后,会导致程序错误,因此不勾选
- Restart UDF Sever : 点击后会重新运行表格后台作为支撑的python服务器
- RunPython : Use UDF Server
这个按钮勾选了,就会使用UDF Server来运行 “Run main” 的按钮,这不会每次点击“Run main”时都重新开关一次python进程,运行Runmain 会快很多,建议开启 - Show Console : 如果勾选了,则运行的python代码会弹出一个命令行窗口用来展示,方便调试python代码,前期建议开启。