启明办公

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 82|回复: 20

Excel+Python,简直法力无边

[复制链接]

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-9 20:05:01 | 显示全部楼层 |阅读模式
以下文章来源于Python大数据分析,作者朱卫军
链接:Excel+Python,简直法力无边
<hr/>


文章为转载!我也是本着试试的心态!想分享这篇文章给大家一起看看!
我在百战程序员学的Python课,看到有趣的文章都是收藏+分享的~
毕竟作为新手菜鸟还是要多看多学习啊~
老师教的东西都是有数的,课下自己也要多联系~
所以我也经常收藏一些我看起来有用的帖子,然后自己课后练习一下!听完课在练习练习题,事半功倍!
大家感兴趣的话也可以收藏啊!跟着步骤自己练习一下~


<hr/>这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作。



说起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呢?主要有以下三点理由:



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




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




  • Python中有众多优秀的第三方库,随用随取,可以节省大量代码时间;
对于Python爱好者来说,pandas、numpy等数据科学库用起来可能已经非常熟悉,如果能将它们用于Excel数据分析中,那将是如虎添翼。
二、为什么使用xlwings?

Python中有很多库可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。
但相比其他库,xlwings性能综合来看几乎是最优秀的,而且xlwings可以实现通过Excel宏调用Python代码。




xlwings的入门使用这里不多做讲解,如果大家还不了解,先看看我之前写的入门介绍:xlwings,让excel飞起来!
安装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文章
<hr/>
回复

使用道具 举报

1

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2022-12-9 20:05:13 | 显示全部楼层
pip install python

这个太厉害了[惊讶][捂脸]
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-9 20:06:03 | 显示全部楼层
如何分发?
回复

使用道具 举报

0

主题

7

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-9 20:06:38 | 显示全部楼层
笑yue了[惊喜]
回复

使用道具 举报

1

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-9 20:07:14 | 显示全部楼层
我点了赞了,但是我想问,为什么。
python里面直接panda多好。为什么非要放到excel里搞得这么复杂。
回复

使用道具 举报

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-9 20:07:45 | 显示全部楼层
应该是笔误[大笑]
回复

使用道具 举报

2

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-12-9 20:08:31 | 显示全部楼层
请问怎么从excel删除那个插件
回复

使用道具 举报

1

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-9 20:09:19 | 显示全部楼层
pip install python ???
回复

使用道具 举报

0

主题

5

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-12-9 20:09:32 | 显示全部楼层
pip install python[捂嘴]
回复

使用道具 举报

1

主题

7

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2022-12-9 20:09:52 | 显示全部楼层
1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|启明办公

Copyright © 2001-2013 Comsenz Inc.Template by Comsenz Inc.All Rights Reserved.

Powered by Discuz!X3.4

快速回复 返回顶部 返回列表