目录
xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。开源免费,一直在更新。特点:
文档链接:
xlwings 文档
https://docs.xlwings.org/en/stable/index.html
pip install xlwings
在我们操作之前可以先了解下,如下内容:
在xlwings中
对Excel进行操作主要使用如下三个类:
- import xlwings as xw
-
- xw.App 打开一个excel应用
-
- xw.Book 创建一个工作薄
-
- xw.Sheet 创建一个工作表
app=xw.App(visible=True,add_book=False)
参数visible:用来设置程序是否可见,True表示可见(默认),Flase不可见
参数add_book用来设置是否自动创建工作簿,True表示自动创建(默认),False不创建。当设置成add_book=False时,可以创建App,但是还未生成PID,只有当这个App创建了工作簿后,才会生成自己的PID 。
app.pid
即可查看创建的app的pid值。
在操作一个app对象的时候要先引用工作薄,但是引用并不代表激活,激活就是当前操作的工作薄。
wb=app.books.add()
表示在该app下创建一个工作簿。
关闭app有两种方式:
- app.kill():通过杀掉进程,强制Excel app退出
-
- app.quit():退出excel程序,不保存任何工作簿
一个app可以包含多个工作薄,创建工作薄有两种方式:
如果是打开一个已存在的则可以
- wb = app.books.open('绝对或者相对路径的excel文件')
- '或者
- wb = xw.Book('绝对或者相对路径的excel文件')
激活工作簿
- wb.activate()
- # 如果steal_focus=True, 则把窗口显示到最上层,并且把焦点从Python切换到Excel
- wb.activate(steal_focus=True)
保存工作薄:
- wb.save()
- # 或者使用指定路径保存
- wb.save('存储路径')
关闭工作薄:
wb.close()
需要注意的是,关闭工作簿并不会保存,所以在关闭前记得保存一下。 也可以与with语句一起使用,实现关闭资源。
新建Sheet
- sht = wb.sheets.add()
- # 或者
- sht = wb.sheets.add('test',after='sheet2')
参数1为工作表名称,省略的话为Excel默认名称,参数2为插入位置,可选before或者after
引用某一个Sheet,可以通过下面方式
- sht = wb.sheets('sheet1') # 指定名称获取sheet工作表
-
- sht = wb.sheets(1) # 根据序号获取
-
- sht = xw.sheets.active #获取当前活动的工作表
sheet对象可以调用的常用方法有:
- # 清除工作表所有内容和格式
- sht.clear()
- # 清除工作表的所有内容但是保留原有格式
- sht.clear_contents()
- # 删除工作表
- sht.delete()
- # 自动调整行高列宽
- sht.autofit('c')
- # 在活动工作簿中选择
- sht.select()
在操作区域或者单元格之前,首先就要引用他们,其实就是表明你要操作的区域或者单元格是哪些。可以认为区域是多个单元格。
引用区域的方式有很多种,下面列举一下常见的引用方式:
- xw.Range('A1:D4')
- xw.Range((1,1), (4,4))
- xw.Range(xw.Range('A1'),xw.Range('D4'))
- xw.Range(xw.Range('A1:E6'),xw.Range('C3:D7'))
- xw.Range('NamedRange')
- app.range("A1") # 注意是小写的range
- sht.range('A1')
- xw.books['MyBook.xlsx'].sheets[0].range('A1')
- sht['A1']
- sht['A1:D4']
- sht[0,5]
- sht[:5,:5]
对区域或单元格进行操作:
- # 存储单个数据
- sht.range('a1').value = 'id'
- # 存储单行数据
- sht.range('a2').value = ['id', '姓名', '年龄']
- # 存储多行数据
- sht.range('a3').value = [['1', '2', '3'], ['4', '5', '6']]
存储多行数据的时候,需要是二维数组,内部的每一个数组则是一行数据

最后则是这样的效果。
读取数据
- 读取单个值
- # 将A1的值,读取到a变量中
- a=sht.range('A1').value
-
- 将值读取到列表中
- #将A1到A2的值,读取到a列表中
- a=sht.range('A1:A2').value
-
- # 将第一行和第二行的数据按二维数组的方式读取
- a=sht.range('A1:B2').value
清除与删除
- # 清除range的内容
- rng.clear_contents()
- # 清除格式和内容
- rng.clear()
- # 删除
- rng.delete(shift=None)
rng表示引用的区域
有关xlwings模块的使用看下面链接