Python 使用 xlwings 操作Excel

上一篇 / 下一篇  2021-09-30 10:23:24 / 个人分类:Python

Python xlwings 读取 写入 修改 操作Excel

xlwings比起xlrd、xlwt和xlutils,xlwings可豪华多了,它具备以下特点:51Testing软件测试网&?.^+wi[.|

  • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改51Testing软件测试网:f)u$| qb\(s
  • 可以和matplotlib以及pandas无缝连接,支持读写numpy、pandas数据类型,将matplotlib可视化图表导入到excel中。
    9FO C2d)DJ0
  • 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
  • 开源免费,一直在更新

官网地址:xlwings.org/51Testing软件测试网S I|R q(qv

官方文档:docs.xlwings.org/en/sta

)m-_s:DfGv0

4.1 pip安装xlwings

pipinstallxlwings

4.2 基本操作

引入库

~_2{(WS*R-oX0
importxlwingsasxw

打开Excel程序,默认设置:程序可见,只打开不新建工作薄

}v%B`5{ eF$^&q*jr0
app=xw.App(visible=True,add_book=False)#新建工作簿 (如果不接下一条代码的话,Excel只会一闪而过,卖个萌就走了)wb=app.books.add()

打开已有工作簿(支持绝对路径和相对路径)51Testing软件测试网"y&t3l/\L

wb=app.books.open('example.xlsx')#练习的时候建议直接用下面这条#wb = xw.Book('example.xlsx')#这样的话就不会频繁打开新的Excel

保存工作簿51Testing软件测试网4Kk%O'M#^:r1e

wb.save('example.xlsx')

退出工作簿(可省略)51Testing软件测试网%p5? Msr7S:wF

wb.close()

退出Excel51Testing软件测试网 J p&i;ky(\

app.quit()

三个例子:51Testing软件测试网 f6T(p9[ak2Oxa

(1)打开已存在的Excel文档

%fP1rU8tq4w0
# 导入xlwings模块importxlwingsasxw# 打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭app=xw.App(visible=True,add_book=False)app.display_alerts=Falseapp.screen_updating=False# 文件位置:filepath,打开test文档,然后保存,关闭,结束程序filepath=r'g:\Python Scripts\test.xlsx'wb=app.books.open(filepath)wb.save()wb.close()app.quit()

(2)新建Excel文档,命名为test.xlsx,并保存在D盘51Testing软件测试网!J U.T7E?+S8\

importxlwingsasxwapp=xw.App(visible=True,add_book=False)wb=app.books.add()wb.save(r'd:\test.xlsx')wb.close()app.quit()

(3)在单元格输入值51Testing软件测试网5x#O I+sG5GK!{~f

新建test.xlsx,在sheet1的第一个单元格输入 “人生” ,然后保存关闭,退出Excel程序。51Testing软件测试网.t5a j:l1?A;u.vS

importxlwingsasxwapp=xw.App(visible=True,add_book=False)wb=app.books.add()# wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值wb.sheets['sheet1'].range('A1').value='人生'wb.save(r'd:\test.xlsx')wb.close()app.quit()

打开已保存的test.xlsx,在sheet2的第二个单元格输入“苦短”,然后保存关闭,退出Excel程序

u$|0?4A P0
importxlwingsasxwapp=xw.App(visible=True,add_book=False)wb=app.books.open(r'd:\test.xlsx')# wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值wb.sheets['sheet1'].range('A1').value='苦短'wb.save()wb.close()app.quit()

掌握以上代码,已经完全可以把Excel当作一个txt文本进行数据储存了,也可以读取Excel文件的数据,进行计算后,并将结果保存在Excel中。

{XhC#s a)nh0

4.3 引用工作薄、工作表和单元格

(1)按名字引用工作簿,注意工作簿应该首先被打开

we8n SBw*k0
wb=xw.books['工作簿的名字‘]

(2)引用活动的工作薄

\.q Z,zi ~e9X0
wb=xw.books.active

(3)引用工作簿中的sheet

E"r Mfm'o0
sht=xw.books['工作簿的名字‘].sheets['sheet的名字']# 或者wb=xw.books['工作簿的名字']sht=wb.sheets[sheet的名字]

(4)引用活动sheet

1Rl}K T M9d3J3T0
sht=xw.sheets.active

(5)引用A1单元格51Testing软件测试网%yH C@M9otIR

rng=xw.books['工作簿的名字‘].sheets['sheet的名字']# 或者sht=xw.books['工作簿的名字‘].sheets['sheet的名字']rng=sht.range('A1')

(6)引用活动sheet上的单元格

s.wh,R`B_t0
# 注意Range首字母大写rng=xw.Range('A1')#其中需要注意的是单元格的完全引用路径是:# 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格xw.apps[0].books[0].sheets[0].range('A1')迅速引用单元格的方式是sht=xw.books['名字'].sheets['名字']# A1单元格rng=sht[A1']# A1:B5单元格rng=sht['A1:B5']# 在第i+1行,第j+1列的单元格# B1单元格rng=sht[0,1]# A1:J10rng=sht[:10,:10]#PS: 对于单元格也可以用表示行列的tuple进行引用# A1单元格的引用xw.Range(1,1)#A1:C3单元格的引用xw.Range((1,1),(3,3))

引用单元格:

l$z@,Gw2BVX0
rng=sht.range('a1')#rng = sht['a1']#rng = sht[0,0] 第一行的第一列即a1,相当于pandas的切片

引用区域:51Testing软件测试网dSNFea{C

rng=sht.range('a1:a5')#rng = sht['a1:a5']#rng = sht[:5,0]

4.4 写入&读取数据

1.写入数据51Testing软件测试网/z}:^t(Q k

(1)选择起始单元格A1,写入字符串‘Hello’51Testing软件测试网}*EG*AQ

sht.range('a1').value='Hello'

(2)写入列表

3y6]8i @[`3B(}a0
# 行存储:将列表[1,2,3]储存在A1:C1中sht.range('A1').value=[1,2,3]# 列存储:将列表[1,2,3]储存在A1:A3中sht.range('A1').options(transpose=True).value=[1,2,3]# 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4sht.range('A1').options(expand='table')=[[1,2],[3,4]]
  • 默认按行插入:A1:D1分别写入1,2,3,4
sht.range('a1').value=[1,2,3,4]

等同于

$}\ T;Um0
sht.range('a1:d1').value=[1,2,3,4]
  • 按列插入: A2:A5分别写入5,6,7,8

你可能会想:51Testing软件测试网Y4yl.x9]

sht.range('a2:a5').value=[5,6,7,8]

但是你会发现xlwings还是会按行处理的,上面一行等同于:

#?.pAHJ(h}8S,X2j0
sht.range('a2').value=[5,6,7,8]

正确语法:

;?/F*fl!W2E})z5g0

TAG:

 

评分:0

我来说两句

日历

« 2022-01-19  
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

数据统计

  • 访问量: 186381
  • 日志数: 131
  • 图片数: 4
  • 文件数: 1
  • 书签数: 1
  • 建立时间: 2006-12-11
  • 更新时间: 2021-12-21

RSS订阅