首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

xlwings:让Excel调用Python

最近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中的各种对象比较起来看,以后有时间我们再来谈谈更复杂的例子。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181230G0Y2SC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券