Python代替Excel VBA,原来真的可以

点击上方“Python爬虫与数据挖掘”,进行关注

回复“书籍”即可获赠Python从入门到进阶共10本电子书

春潮带雨晚来急,野渡无人舟自横。

952bbea5044206920b0e5c9a36969e8d.png

VBA与Python:当王者荣耀遇到卷王之王

VBA语言是VB的一个子集,具有简单易学、功能强大的特点。

上世纪90年代末至今,VBA语言被大部分主流行业软件用作脚本语言,包括办公软件如Excel、Word、PowerPoint等,GIS软件如ArcGIS、MapInfo、GeoMedia等,CAD软件如AutoCAD、 SolidWorks等,统计软件如SPSS等,甚至连图形软件如PhotoShop、CoralDraw等也使用VBA进行脚本编程。

近年来,Python语言异军突起,在各大计算机语言排行榜上牢牢占据前3名。

Python语言同样简单易学,并且免费开源,在系统运维、网络编程、科学计算等领域取得广泛的应用。Python有很多内置的库和第三方库,每个库在某个行业或方向上提供功能。利用它们,用户可以站在前人的肩膀上,将主要精力放在自己的事情上,做到事半功倍。

另外,Python号称胶水语言,被越来越多的软件用作脚本语言。上面提到的很多行业软件中,ArcGIS和SPSS软件官方已经将Python作为内置的脚本语言,与VBA语言放在一起供用户选择使用。其他如Excel、Word、PowerPoint、AutoCAD等也能找到各种第三方Python包,利用它们可以部分或整体替换VBA,实现对应的脚本编程。

与Excel有关的Python包

目前,常用的与Excel有关的第三方Python包如下表所示。

ec1eebfd40282f2e46e44d5fd2e80ca7.png

这些包都有各自的特点,有的小、快、灵,有的功能齐全可与VBA使用的对象模型相媲美;有的不依赖Excel,有的必须依赖Excel;有的工作效率一般,有的工作效率很高。

xlwings: 为什么Python能完美代替Excel VBA?

在上面的表格中,目前图书和网络介绍得比较多的有xlrd、xlwt和OpenPyXl等包。

这几个包提供的功能比较有限,所以给很多同学造成了Python不如VBA的错觉。

这里要给大家重点推荐的是表中的win32com包和xlwings包。win32com包将Excel、Word和Powerpoint等软件的所有对象打包成一个COM组件提供给Python调用,所以,它使用的对象模型跟VBA使用的对象模型是完全一样的。

Excel脚本编程有两个重要内容,一个是脚本语言,另一个是对象模型,脚本语言通过面向这些对象编程,控制Excel并与Excel软件进行交互操作。

现在,对象模型是一样的,Python语言可以代替VBA语言,所以Python能完美代替VBA进行Excel脚本编程,VBA能做的,使用win32com也能做。

xlwings包则是在win32com包的基础上进行了二次封装,所以,VBA能做的,使用xlwings也能做。

不仅如此,用Python代替Excel VBA,还可以免费获得Python提供的大量数据分析、数据可视化和网络编程等方面的能力。

xlwings牛刀小试

下面这段代码用于在工作簿中批量创建10个工作表:

>>> import xlwings as xw
>>> app=xw.App()
>>> bk=app.books(1)
>>> for i in range(10):
   bk.api.Worksheets.Add(After=\
bk.api.Worksheets(bk.api.Worksheets.Count))

效果如下图所示。

2a4d7c04afb97195f7bc29b7f02c493f.png

下面的代码利用工作表中的数据创建图表:

>>> import xlwings as xw  #导入xlwings
>>> app=xw.App()  #创建Excel应用
>>> wb=app.books.active  #活动工作簿
>>> sht=wb.sheets.active  #活动工作表
>>> cht=sht.charts.add(50, 200)  #添加图表
>>> cht.set_source_data(sht.range("A1").expand())  #图表绑定数据
>>> cht.chart_type="column_clustered"  #图表类型
>>> cht.api[1].HasTitle=True  #图表有标题

效果如下图所示:

f190d169f33dec8ccad6f389e6b48fa2.png

xlwings的主要功能综述如下:

  • 操作工作簿、工作表、单元格(区域)等核心对象。

  • 创建和编辑Excel图形。

  • 创建和编辑Excel图表。

  • 创建和编辑Excel数据透视表。

  • 使用Excel函数进行数据处理。

  • 插件封装了SQL处理Excel数据的能力。

  • 封装了方便与Python数据类型如NumPy数组、pandas series和dataframe等进行数据类型转换的工具。

  • Python与Excel VBA混合编程。

  • ……

▊ xlwings好学吗?

既然VBA能做的,Python基于xlwings包都能做,那么问题来了:xlwings好学吗?

xlwings包在win32com包的基础上进行了二次封装,所以它一方面间接继承了VBA所使用的Excel对象模型甚至VBA的语法,另一方面它又对常用的功能封装了新的语法。

所以,xlwings实际上有两种使用方式,一种是使用类VBA语法的API使用方式,另一种是使用封装后的新语法的使用方式。

下面的代码分别使用Excel VBA和xlwings的API来选择工作表中的一个单行。

【Excel VBA】
sht.Rows(1) .Select
sht.Range("1:1").Select
sht.Range("A1").EntireRow.Select
【Python xlwings API】
>>> sht.api.Rows(1) .Select()
>>> sht.api.Range("1:1").Select()
>>> sht.api.Range("A1").EntireRow.Select()

可见,二者在语法上高度相似。对于熟悉VBA语法的同学而言,使用xlwings很快就能上手。

xlwings封装的新语法则更简练。例如,下面的代码同样实现选择单行的功能。

【Python xlwings】
>>> sht["1:1"].select()

使用xlwings的新语法从工作表中获取一个单行或单列区域的值,返回的是一个列表表示的一维数组。

【Python xlwings】
>>> lst=sht.range("A1:A5").value
>>> lst
[1.0, 2.0, 3.0, 4.0, 5.0]

使用Excel VBA获取到的则是一个二维数组,需要通过转换得到一维数组。

▊ 学习xlwings的好书

这里给大家分享一本学习xlwings的好书——《代替VBA!用Python轻松实现Excel编程》

ab1f56665e259bd296fb2cc805289373.png

本书以xlwings为主线,用Python一对一复现了Excel VBA的各种脚本编程能力。内容从语言基础,到Excel对象模型、文件、图形图表,到字典、正则表达式应用专题,到pandas数据分析,混合编程等,覆盖了Excel办公自动化和数据分析编程的主要内容。

怎样解决语言问题?

Python基于xlwings包进行Excel脚本编程时,由于使用的Excel对象模型与VBA使用的一样,所以能实现完美替换VBA。

但是,有的同学可能会讲,还有语言问题呢,Python看起来并没有宣传的那样好学!

我们想到的办法是语言对照学习

对照学习是将两种语言的语法打碎,并实现语法知识点一对一的对照和融合,能帮助我们在自己熟悉的语境里快速理解和掌握另一门语言。

关于Python与Excel VBA语言对照学习方面的图书我们正在撰写,敬请关注。我们愿意以最贴心的服务,为您从Excel VBA快速平稳过渡到Python保驾护航。

扫码抢购!

8350a1d9a6e05db83ff75083eb1e037d.png

032bf4c464fdfaadbb4909b18014eafb.png

如果喜欢本文
欢迎 在看丨留言丨分享至朋友圈 三连
 
 
 
 
 
 
赠书

    按以下方式和公众号互动,即有机会获赠以上一本图书!
活动方式:在下方公众号后台回复“VBA”参与活动,届时会在参与的小伙伴中抽取1名幸运鹅!

    活动时间:截至1月26日20点(周三)开奖,不见不散。
    快快拉上你的小伙伴参与进来吧~

让我知道你在看哟☟☟

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值