目录
xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。开源免费,一直在更新。特点:
- xlwings支持.xls读,支持.xlsx文件读写。
- 支持Excel操作。
- 支持VBA。
- 强大的转换器可以处理大部分数据类型,包括在两个方向上的numpy array和pandas DataFrame。
文档链接:
xlwings 文档https://docs.xlwings.org/en/stable/index.html
安装
pip install xlwings
使用
在我们操作之前可以先了解下,如下内容:
- 新建:创建一个不存在的工作薄或者工作表
- 打开:打开一个已经存在的工作薄
- 引用:就是告诉程序,你要操作哪个对象。比如你打开了A、B、C三个工作薄,现在你想操作A工作薄,就要先引用A
- 激活:我们可以同时打开多个工作薄,但是一次只能操作一个工作簿,我们正在操作的这个工作薄称为当前活动工作薄。
在xlwings中
- Excel程序用App来表示,多个Excel程序集合用Apps表示;
- 单个工作簿用Book表示,工作簿集合用Books表示;
- 单个工作表用Sheet表示,工作表集合用Sheets表示;
- 区域用Range表示,既可以是一个单元格,也可以是一片单元格区域。
对Excel进行操作主要使用如下三个类:
import xlwings as xw
xw.App 打开一个excel应用
xw.Book 创建一个工作薄
xw.Sheet 创建一个工作表
创建App
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程序,不保存任何工作簿
工作簿Book与Books
一个app可以包含多个工作薄,创建工作薄有两种方式:
- xw.Book()
- 方式1是创建一个新的App,并在新App中新建一个Book
- xw.books.add()
- 是在当前App下新建一个Book
如果是打开一个已存在的则可以
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
新建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模块的使用看下面链接