python操作excel_Python操作EXCEL 之 对比vba学习xlwings

本文介绍用Python的Xlwings模块操作Excel文件。对比了Xlwings和VBA对Excel的操作,指出Xlwings函数设置与VBA近乎一致且有简化。还提及使用Xlwings的注意点,如函数大小写要求、参数设置等,也提到numpy数组可直接输入Excel。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久之前就想学习个关于python操作Excel文件的模块,虽然个人觉得处理EXCEL方面vba目前仍然是适合的,但是Python在处理数组上的强大(方便),以及在其它文件的操作上比vba强大不是一点两点,代码方面也要轻松简捷不少。只是由于个人各种原因给忽略了。直到遇到了Xlwings这个传说中跟VBA长的很像的模块出现。不是说其它处理EXCEL的模块功能不好,不好学习,或者什么原因(我也压根没仔细了解过),一个是缘分吧,另外一个是我除了C 这个在学校里面学过以外,就数Vba这个最熟悉了。既然碰到对的,就赶紧学起来。

25d5f7779873338a3ee6e5e709e70d0b.png 上面这个图基本上介绍xlwings 基础的文章都会出现,app 相当于我们EXCEL 程序,book 就是工作簿,sheet 是工作表,range 单元格。(好像xlwings原来的版本工作簿也是用的workbook,好像后面更新修改得更简捷了),光看这里,是不是觉得就很相似了?

再粗略地对比了一下xlwings 和vba对EXCEL的一些操作。

Xlwings

vba

打开EXCEL程序

import xlwings as xw

app = xw.App(visible=False)

窗口提示关闭

app.display_alerts = False 

Application.DisplayAlerts = False

屏幕更新关闭

app.screen_updating = False 

Application.ScreenUpdating = False

版本信息

xw.App().version

application.Version

工作簿

新建工作簿

wb = app.books.add()

Set wb = Application.Workbooks.Add

保存工作簿

wb.save(r'D:\test.xlsx')

wb.SaveAs ("test.xlsx")

关闭工作簿

wb.close()

wb.Close

打开已有工作簿

wb = xw.Book(r'D:\test.xlsx')

Set wb = Application.Workbooks.Open("test.xlsx")

工作表

第一个工作表

sht = wb.sheets[0]
sht = wb.sheets['Sheet1']

set sht= wb.sheets(1)
set sht= wb.sheets("Sheet1")

单元格

一个单元格

sht.range('A1').value = 'abc'
sht[1,1].value = 'aaa'
sht['A1'].value = 'cba'
sht.range(2,3).value = 'cba'

sht.range('A1').value = 'abc'
sht.cells(1,1).value="aaa"

连续单元格

sht.range((1,1),(3,3)).value='c'sht[1:5,1:5].value = 'bb'   
sht.range('B2:D5').value = 123

sht.Range("a1:b4").Value = 1

按行输入列表

sht.range('A1').value = [1,2,3] 

sht.range("a1:c1").value=(1,2,3)

按列输入列表

sht.range('A1').options(transpose=True).value = [1,2,3]

arr = Array(1, 35, 2)
sht.Range("a1:a3").Value = Application.Transpose(arr)

读取

arr = sht.range('B2:D5').value
rng = sht.Range((1,1),(3,3))

arr= sht.range('B2:D5').value
rng = sht.range(cells(1,1),cells(3,3))

填充颜色

sht[2,2].color=(146, 208, 80)

Range("d25").Interior.Color= RGB(146, 208, 80)

最后一个非空单元格

row1= sht.range('A50').end('up').row

row1=range("a50").end(xlup).row

 

由上面的表可以看到,xlwings其实函数的很多设置上跟vba近乎一致,只是又加入了一些python的风格,另外在此基础上又做了简化。下面再介绍一下,学习过程中碰到的一些需要注意的地方:

一、函数首字母的大小写

在使用xlwings的时候,函数的大小写是有严格要求的,如App、apps、Book、book、Range、range等首字母的大小写不一样,代表的函数功能是不一样的,这里大写不能用小写来代替,否则会提示找不到相关函数,或者得到不一样的结果。这个与我们VBA就不一样,vba的函数是不区分大小写的。

二、打开Excel程序。
import xlwings as xw     #导入模块app =xw.App(visible=False,book_add=False)     app.quit()     #退出EXCLEL软件

 visible=False程序不可见,你已经打开了文件,但是EXCEL窗口不显示出来。book_add=False不新建工作表。

三、对象操作习惯    由我们一开始看到的xlwings的基本对象的图片,按我们正常的理解,我们需要操作工作簿,应该是通过app来打开,我们需要操作单元格,应该是取某个工作簿的工作表的某个range。在vba中,如果没有特殊指定的情况下,我们可以跳过workbook和sheet,直接用range就行了。看上面的对照表,我们可以发现,xlwings在对象这里的要求也不严格。比如说我们可以跳开app,直接通过Book打开工作簿。A、
app =xw.App(visible=False,add_book=False)    wb =xw.Book(r'D:\test.xlsx')
B、
app =xw.App(visible=False,add_book=False)wb2=app.books.open(r'D:\test.xlsx')
1、这两句的打开效果是一样的。当然这里A如果不执行app这一行,直接用Book打开的话,那效果可能就不一样了,可能会有多个EXCEL程序出现。2、app.books.open 是在app = xw.App(visible=False)执行后才可以执行的,但是xw.App.books.open是不可以执行的。两个的属性是一样的。具体原因还没学习上,有兴趣的可以自行了解下。我的理解是在赋值前和赋值后,两个对象已经是完全不一样的东西了,那他们的属性当然也就不一样了(有点牵强是吧,聊胜于无呗)。 四、编号及列号

1、  在引用工作表的时候,Xlwings与vba都可以按表的编号和表名来引用,但不一样的是,xw的工作表编号是从0开始的,而vba是从1开始的。当然,单元格的编号表示就不存在这样的情况了,大家都是从1开始的。

2、  range(“a”&n),在Vba中,n必须是数值。但是,在xlwings中,n必须是一个字符串,所以如果n是数值的话,还需要进行转换,str(n)。

五、Numpy

聊到数组,必须提一下numpy,由numpy产生的数组,可以直接的赋值输入到EXCEL当中。Pandas 也是可以的,只不过还没有认真学习过这模块这里就不提了。

import numpy as nparr=np.random.random((3,3))sht.range('A1').value=arr
 

除了以上提到的这些,xlwings还有很多其他的函数,后面我们可以用python的dir(),和help(),再了解一下模块都有哪些函数,根据已经看到过的文档,以及python的一些函数使用习惯,看看帮助文档里面有没有例子,逐个自行学习,补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值