python 操作excel_Python 操作EXCEL 之对⽐vba 学习xlwings
很久之前就想学习个关于python操作Excel⽂件的模块,虽然个⼈觉得处理EXCEL⽅⾯vba⽬前仍然是适合的,但是Python在处理数组上的强⼤(⽅便),以及在其它⽂件的操作上⽐vba强⼤不是⼀点两点,代码⽅⾯也要轻松简捷不少。只是由于个⼈各种原因给忽略了。直到遇到了Xlwings这个传说中跟VBA长的很像的模块出现。不是说其它处理EXCEL的模块功能不好,不好学习,或者什么原因(我也压根没仔细
了解过),⼀个是缘分吧,另外⼀个是我除了C 这个在学校⾥⾯学过以外,就数Vba这个最熟悉了。既然碰到对的,就赶紧学起来。
上⾯这个图基本上介绍xlwings 基础的⽂章都会出现,app 相当于我们
vba自学好学吗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 = 'lls(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 arr= sht.range('B2:D5').value
读取
rng = sht.Range((1,1),(3,3))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 np
arr=np.random.random((3,3))
sht.range('A1').value=arr
除了以上提到的这些,xlwings还有很多其他的函数,后⾯我们可以⽤python的dir(),和help(),再了解⼀下模块都有哪些函数,根据已经看到过的⽂档,以及python的⼀些函数使⽤习惯,看看帮助⽂档⾥⾯有没有例⼦,逐个⾃⾏学习,补充。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论