最近17级的同学们在进行Python实践,老师出了一个需要GUI的数据分析题。正当大部分同学都在钻研tinker的时候,有位同学问到了一个很有趣的问题,我觉得可以拿出来说一说。
如果源数据在Excel中,输出数据也希望在Excel中,我能否在过程中调用Python来进行数据分析?
当然能,我们在《金融风险管理》《量化投资分析》等课程中,有大量任务是从Excel文件中获取数据,最终结果又保存到Excel中去的,课上我们基本都使用pandas来完成这项任务。Pandas很强大,我们只需要将Excel作为数据载体,完全以Python为工具,等于是放弃了Excel本身强大的数据处理功能。那我们能不能以Excel为工具,仅仅将Python写的函数作为Excel功能的扩展呢?
当然能,此时你需要xlwings。
1 使用情境
什么时候用xlwings?
当我们只想打开Excel文档(不打开Python),但又希望能用到Python功能的时候,xlwings为我们搭建了一个在Excel内调用py文件的功能。
2 基本设置
要想使用这个功能,我们需要做一些基本设置。
2.1 安装xlwings
安装完成后,我们可以看一下安装的版本和位置:
2.2 调用addin
在安装xlwings的位置(参见2.1),可以找到名为的文件夹,其中包含一个名为的文件。找到这个关键文档,下面跟着我的步骤来:
第1步:
新建一个Excel文档,将其保存为xlsm格式(启用宏的工作簿)。
第2步:
点击【文件】—【选项】—【信任中心】—【信任中心设置】—【宏设置】,勾选【启用所有宏】。
第3步:
双击【】。注意什么都不会打开,但Excel工作簿多了一个xlwings标签。
第4步:
(确保第3步已完成。)按快捷键【Alt+F11】调出VBE(代码编辑器),点击【工具】—【引用】,勾选【xlwings】。
第5步:
我们已经能在Excel中看到如下标签页:
下面需要做两件事儿:
A. 如上图勾选前面的复选框。
B. 在后面填写Python解释器的路径。如果你跟我一样是通过Anaconda安装的Python,那么解释器会在Anaconda文件夹下,如
C:\Users\CXW\Anaconda3\python.exe
至此,addin部署完成。
3 来自官网的小例子
xlwings的官方网址如下:
https://www.xlwings.org/
手册地址如下:
http://docs.xlwings.org/en/stable/index.html
手册中的《VBA: RunPython》小节给出了一个非常简单的HelloWorld示例。我们也用这个例子来说明一下如何在Excel中调用Python。
3.1 Python脚本的内容和位置
示例所要做的事情是将“Hello World!”这句话放在活动工作簿的活动工作表的A1单元格。代码的内容如下:
我们将其保存成名为的py格式文件。注意,该文件需要放在可被import的路径下才能被成功调用,我们可以通过查看路径的具体情况;但我的建议是,在xlwings的安装路径下新建文件夹来存放自己写的这些py文件,方便在移动xlwings的时候将它们一并带走。
我在xlwings的安装路径下新建名为的文件夹,并将放入其中,即
C:\Users\CXW\Anaconda3\Lib\site-packages\xlwings\funcs\hello.py
想一想,如果我们需要调用world函数,引入约定应该是
3.2 RunPython
我们在Excel中使用来调用Python命令。
注意,RunPython后接一串代码,其中包含了两句话。一句是引入命令,另一句是执行命令,缺一不可。
而作为宏的Sub过程遵循VBA的编程规则,宏名称叫做,大家不要混淆。
3.3 调用宏
调用宏有很多方法,其中最常用的是【Alt+F8】组合键。但既然同学们聊起GUI,我们也给出一个简单的按钮界面。
方案一:控件按钮
点击【开发工具】标签页—【控件】—【插入】—【按钮】,在屏幕适当位置框出一个按钮,松开鼠标就会弹出【指定宏】界面,选择宏即可。
方案二:标签页按钮
点击【文件】—【选项】—【自定义功能区】。从左侧选择【宏】—【HelloWorld】并添加到右边去即可。
两种按钮的效果如下:
4 结语
Python比Excel更好用的地方在于2点:
第一,VB没有类似Python中列表(list)的数据类型,需要花很多心思管理动态数组的大小,更没有数据框(pandas.dataframe)这样带标签的数据类型,从数据处理的角度看并不方便。
第二,Python有太多可供调用的第三方库,能帮助我们节省很多自主开发的时间。
本文的重点在xlwings的安装调试,并未涉及太多的语法内容。其实xlwings的手册很容易看懂,可与Excel-VBA中的各种对象比较起来看,以后有时间我们再来谈谈更复杂的例子。
领取专属 10元无门槛券
私享最新 技术干货