数据方案超市:Excel调用Python优雅的方式——xlwings

一、 Excel 与 Python 的交互关系

Excel 作为全世界使用最广泛的工具,基本等价于办公室表格表格必备工具。但是对于其VBA的编程则是相对蹩脚~

Python作为大数据和人工智能的开发语言,拥有众多成型的工具库,特别是使用最广泛的的 Pandas,以及SK-Learn 等算法模型包。(当然,在Excel里面调用Python TensorFlow实现AI的功能,应该就说不过去的啦~)。

但是,Excel 中怎么调用 Python,在Excel中也能够玩Python的算法和模型——是对众多Excel用户的赋能。其中,xlwings——则为基于 Excel 调用 Python提供了完美的支持!

数据方案超市:Excel调用Python优雅的方式——xlwings

三、 xlwings的安装与使用

xlwings 的中文官方文档:https://docs.xlwings.org/zh_CN/latest/installation.html

3.1 xlwings 的安装:pip install xlwings

或者

conda install xlwings

3.2 xlwings 的使用

xlwings 的使用分为两个场景: 一个是以 Python为主,直接通过 xlwings 控制Excel的各种数值和运算;另外一种情况就是以Excel为主,通过xlwings 调用Python标准库,得到结果之后再返回Excel。

3.2.1 以Python为主,通过 xlwings 控制Excel

如果你在ipython/python交互模式下,同时你打开了一个Excel表格.可以简单地对当前活动进行操作,以及获取单元格信息。

>>> import xlwings as xw
#A1单元格输入”DataClubs”
>>> xw.Range(‘A1’).value = ‘DataClubs’
#获取A1单元格的值
>>> xw.Range(‘A1’).value
‘DataClubs’

可以读取Numpy数组和Pandas的DataFrames数组,填充到单元格。同时也很容易从表格中按自己的方式读取数组。

Sub HelloWorld()
RunPython (“import hello; hello.world()”)
End Sub

Matplotlib图标也可以作为图片显示在Excel中

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> plt.plot([1, 2, 3, 4, 5])
[<matplotlib.lines.Line2D at XXXXXX>]
>>> wb = xw.Book()
>>> wb.sheets[0].pictures.add(fig, name=’MyPlot’, update=True)
<Picture ‘MyPlot’ in <Sheet [Workbook4]Sheet1>>

3.2.2 以Excel为主,通过 xlwings 调用Python标准库——Excel宏和UDFs函数的方式

首先,通过Excel的的查看代码,定义以下的函数——需要注意的是函数的名称和路径直接影响下一步中对应的 Python文件的名称和具体的函数名称

import xlwings as xw
@xw.func
def hello(name):
return ‘Hello {0}’.format(name)

然后,基于以上定义的函数中对应的hello文件名称,以及对应的world的函数名称确定,调用 Python的文件名和函数名即可。具体如下:

# hello.py
import numpy as np
import xlwings as xw

def world():
wb = xw.Book.caller()
wb.sheets[0].range(‘A1’).value = ‘Hello World!’

另外, 也可以直接按照以下的方式定义用户自定义函数(UDFs)——该种情况,在财务报表的分析中可以根据实际情况进行相对标准的定义。(注意,此时的关键词是:@xw.func)

import xlwings as xw
@xw.func
def hello(name):
return ‘Hello {0}’.format(name)

四、 Excel + Python 获取的中国股票数据的案例

以下是通过 xlwings 实现的,基于Excel调用 Python 获取的各种股票数据,进而达到玩数据的相关过程。

数据方案超市:Excel调用Python优雅的方式——xlwings

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注