网易首页 > 网易号 > 正文 申请入驻

在Excel中调用Python脚本,实现数据自动化处理!

0
分享至

大家好,我是小z,也可以叫我阿粥~

说起Excel,那绝对是数据处理领域王者般的存在,尽管已经诞生三十多年了,现在全球仍有7.5亿忠实用户,而作为网红语言的Python,也仅仅只有700万的开发人员。

Excel是全世界最流行的编程语言。对,你没看错,自从微软引入了LAMBDA定义函数后,Excel已经可以实现编程语言的算法,因此它是具备图灵完备性的,和JavaScript、Java、Python一样。

虽然Excel对小规模数据场景来说是刚需利器,但它面对大数据时就会有些力不从心。

我们知道一张Excel表最多能显示1048576行和16384列,处理一张几十万行的表可能就会有些卡顿,当然你可以使用VBA进行数据处理,也可以使用Python来操作Excel。

这就是本文要讲到的主题,Python的第三方库-xlwings,它作为Python和Excel的交互工具,让你可以轻松地通过VBA来调用Python脚本,实现复杂的数据分析。

一、为什么将Python与Excel VBA集成?

VBA作为Excel内置的宏语言,几乎可以做任何事情,包括自动化、数据处理、分析建模等等,那为什么要用Python来集成Excel VBA呢?主要有以下三点理由:

  1. 如果你对VBA不算精通,你可以直接使用Python编写分析函数用于Excel运算,而无需使用VBA;

  1. Python相比VBA运行速度更快,且代码编写更简洁灵活;

  1. Python中有众多优秀的第三方库,随用随取,可以节省大量代码时间;

对于Python爱好者来说,pandas、numpy等数据科学库用起来可能已经非常熟悉,如果能将它们用于Excel数据分析中,那将是如虎添翼。

二、为什么使用xlwings?

Python中有很多库可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。

但相比其他库,xlwings性能综合来看几乎是最优秀的,而且xlwings可以实现通过Excel宏调用Python代码。

xlwings的入门使用这里不多做讲解。

安装xlwings非常简单,在命令行通过pip实现快速安装:

pip install python

安装好xlwings后,接下来需要安装xlwings的 Excel集成插件,安装之前需要关闭所有 Excel 应用,不然会报错。

同样在命令行输入以下命令:

xlwings addin install

xlwings和插件都安装好后,这时候打开Excel,会发现工具栏出现一个xlwings的菜单框,代表xlwings插件安装成功,它起到一个桥梁的作用,为VBA调用Python脚本牵线搭桥。

另外,如果你的菜单栏还没有显示“开发工具”,那需要把“开发工具”添加到功能区,因为我们要用到宏。

步骤很简单:

1、在"文件"选项卡上,转到"自定义>选项"。

2、在“自定义功能区”和“主选项卡”下,选中“开发工具”复选框。

菜单栏显示开发工具,就可以开始使用宏。

如果你还不知道什么是宏,可以暂且把它理解成实现自动化及批量处理的工具。

到这一步,前期的准备工作就完成了,接下来就是实战!

三、玩转xlwings

要想在excel中调用python脚本,需要写VBA程序来实现,但对于不懂VBA的小伙伴来说就是个麻烦事。

但xlwings解决了这个问题,不需要你写VBA代码就能直接在excel中调用python脚本,并将结果输出到excel表中。

xlwings会帮助你创建.xlsm.py两个文件,在.py文件里写python代码,在.xlsm文件里点击执行,就完成了excel与python的交互。

怎么创建这两个文件呢?非常简单,直接在命令行输入以下代码即可:

xlwings quickstart ProjectName

这里的ProjectName可以自定义,是创建后文件的名字。

如果你想把文件创建到指定文件夹里,需要提前将命令行导航到指定目录。

创建好后,在指定文件夹里会出现两个文件,就是之前说的.xlsm.py文件。

我们打开.xlsm文件,这是一个excel宏文件,xlwings已经提前帮你写好了调用Python的VBA代码。

按快捷键Alt + F11,就能调出VBA编辑器。


Sub SampleCall()mymodule = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))RunPython "import " & mymodule & ";" & mymodule & ".main()"End Sub

里面这串代码主要执行两个步骤:

1、在.xlsm文件相同位置查找相同名称的.py文件

2、调用.py脚本里的main()函数

我们先来看一个简单的例子,自动在excel表里输入['a','b','c','d','e']

第一步:我们把.py文件里的代码改成以下形式。

import xlwings as xw
import pandas as pd

def main():
wb = xw.Book.caller()
values = ['a','b','c','d','e']
wb.sheets[0].range('A1').value = values

@xw.func
def hello(name):
return f"Hello {name}!"

if __name__ == "__main__":
xw.Book("PythonExcelTest.xlsm").set_mock_caller()
main()

然后在.xlsm文件sheet1中创建一个按钮,并设置默认的宏,变成一个触发按钮。

设置好触发按钮后,我们直接点击它,就会发现第一行出现了['a','b','c','d','e']

同样的,我们可以把鸢尾花数据集自动导入到excel中,只需要在.py文件里改动代码即可,代码如下:

import xlwings as xw
import pandas as pd

def main():
wb = xw.Book.caller()
df = pd.read_csv(r"E:\\test\\PythonExcelTest\\iris.csv")
df['total_length'] = df['sepal_length'] + df['petal_length']
wb.sheets[0].range('A1').value = df

@xw.func
def hello(name):
return f"Hello {name}!"

if __name__ == "__main__":
xw.Book("PythonExcelTest.xlsm").set_mock_caller()
main()

好了,这就是在excel中调用Python脚本的全过程,你可以试试其他有趣的玩法,比如实现机器学习算法、文本清洗、数据匹配、自动化报告等等。

Excel+Python,简直法力无边。

参考medium文章

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
诸葛一生唯谨慎,从普京飞往河内路线图说开去

诸葛一生唯谨慎,从普京飞往河内路线图说开去

低调看天下
2024-06-21 09:12:26
蔡斌下课!历史上第一个,主动认输日本的主教练

蔡斌下课!历史上第一个,主动认输日本的主教练

体坛狗哥
2024-06-21 12:23:26
认怂了!刚刚,以色列宣布大消息!

认怂了!刚刚,以色列宣布大消息!

大嘴说天下
2024-06-20 21:47:28
印度少女被迫裸露乳房:想要遮挡自己的乳房,就必须得缴纳乳房税

印度少女被迫裸露乳房:想要遮挡自己的乳房,就必须得缴纳乳房税

忠于法纪
2024-06-20 15:16:49
真的没钱了,地方财政的紧张性,可能会超乎你的想象

真的没钱了,地方财政的紧张性,可能会超乎你的想象

庞明说财经
2024-06-21 15:11:56
广州闹市区一脚手架突发倒塌,正在救援!南都记者直击现场

广州闹市区一脚手架突发倒塌,正在救援!南都记者直击现场

南方都市报
2024-06-21 17:12:13
成都点球战5-4淘汰中冠队!涉险晋级足协杯16强,被业余球员破门

成都点球战5-4淘汰中冠队!涉险晋级足协杯16强,被业余球员破门

我爱英超
2024-06-21 18:16:52
大二女生足疗按摩被扒内裤,还摸其私密处,警方介入,赔偿700元

大二女生足疗按摩被扒内裤,还摸其私密处,警方介入,赔偿700元

180°视角
2024-06-21 14:06:31
最新全球支付货币排名:美元升至47.9%,欧元升至23%,人民币呢

最新全球支付货币排名:美元升至47.9%,欧元升至23%,人民币呢

王五说说看
2024-06-21 15:27:47
玉兰油女神45岁全貌曝光!震撼对比让人惊呆

玉兰油女神45岁全貌曝光!震撼对比让人惊呆

轻嗅蔷薇
2024-06-20 18:50:02
“都别好过!”广西计生局6名员工被砍,凶手:8万超生费缴不起!

“都别好过!”广西计生局6名员工被砍,凶手:8万超生费缴不起!

史说历史
2024-06-20 15:00:13
太恐怖!网传成都某小区因房价降了70万,老业主竟然拿刀堵门…

太恐怖!网传成都某小区因房价降了70万,老业主竟然拿刀堵门…

火山诗话
2024-06-21 08:43:27
请复旦大学公布一下夏承曦的爹娘是谁

请复旦大学公布一下夏承曦的爹娘是谁

端木赐香三糊涂
2024-06-21 12:00:32
美国或已给予乌克兰打击俄罗斯更大自由,下一步会发生什么?

美国或已给予乌克兰打击俄罗斯更大自由,下一步会发生什么?

上观新闻
2024-06-21 18:26:09
美国宣布将所有爱国者防空运往乌克兰!罗马尼亚确认转让

美国宣布将所有爱国者防空运往乌克兰!罗马尼亚确认转让

项鹏飞
2024-06-21 16:32:31
突发:俄罗斯多地遭袭击

突发:俄罗斯多地遭袭击

环球时报新闻
2024-06-21 16:52:01
意大利女排3-0美国入半决赛:获9.01分稳世界第二 四强已确定三席

意大利女排3-0美国入半决赛:获9.01分稳世界第二 四强已确定三席

颜小白的篮球梦
2024-06-21 19:36:00
体育总局要严查中国女排,巴黎奥运会不能当旅游了,教练组要调整

体育总局要严查中国女排,巴黎奥运会不能当旅游了,教练组要调整

阿牛体育说
2024-06-21 19:18:55
西安银行副行长狄浩坠楼身亡?网友曝出高管人员突发事项的报告…

西安银行副行长狄浩坠楼身亡?网友曝出高管人员突发事项的报告…

火山诗话
2024-06-21 15:56:44
巨大反差,俄朝结盟过去一天,来自各国的威胁就让普京服软并解释

巨大反差,俄朝结盟过去一天,来自各国的威胁就让普京服软并解释

走读新生
2024-06-21 13:25:36
2024-06-21 21:24:49
数据不吹牛
数据不吹牛
趣味+实用数据分析
411文章数 4500关注度
往期回顾 全部

科技要闻

一文看懂纯血鸿蒙,自主可控操作系统来了

头条要闻

日本以"涉俄乌冲突"为由制裁中企 外交部回应

头条要闻

日本以"涉俄乌冲突"为由制裁中企 外交部回应

体育要闻

1-0"吊打"意大利 西班牙这就叫冠军相?

娱乐要闻

陈晓惹争议!被曝婚变离家出走冷暴力

财经要闻

专访尹艳林:市场上的钱都流向了哪里?

汽车要闻

领克纯电 来得不晚

态度原创

本地
家居
亲子
游戏
公开课

本地新闻

2024·合肥印象|用崭新视角对话城市发展

家居要闻

木质家具 充溢古典之风

亲子要闻

一个县城妈妈,不相信“天生坏种”

保护神秘生物!《生灵之境:亚娃》8月7日上线

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版