前言
Python3利用Xlwings模块实现Excel的办公自动化
安装模块
快速入门(通过with…as)
1 2 3 4 5 6 7 8 9 10 11 12
| import xlwings
with xlwings.App() as app: book = app.books.add() sheet = book.sheets.add() sheet.range("A1").value = "值" book.save("./filename.xlsx")
|
快速入门
A1
:单元格坐标
值
:写入单元格的数据
1 2 3 4 5 6 7 8 9 10 11 12
| import xlwings
book = xlwings.Book()
sheet = book.sheets["Sheet1"]
sheet.range("A1").value = "值"
book.save()
book.close()
|
对Excl应用程序的操作
启动一个新的应用程序
- 需要安装
Microsoft Office Excl
参数列表
visiable=None
:是否可视
True
:可视
False
:不可视
spec=None
:指定Excl程序的位置
如果是Windows,就在设置中指定默认的Excl打开方式
如果是Mac,可以直接在这里传递Excl应用程序的路径
add_book=True
:是否在打开应用程序时自动创建工作簿
True
:自动创建工作簿
False
:不自动创建工作簿
激活应用程序
1 2 3
| app.activate()
app.activate(steal_focus=True)
|
退出应用程序
关闭应用进程
获取应用程序对象的pid
是否显示Xlwings对Excl的操作过程
True
:显示Xlwings对Excl的操作过程
False
:隐藏Xlwings对Excl的操作过程
1
| app.display_alerts = False
|
是否显示操作过程中的对话框
True
:显示操作过程中的对话框
False
:隐藏操作过程中的对话框
1
| app.screen_updating = False
|
对所有Excl应用程序的操作
获取所有应用程序对象
获取指定应用程序对象
<pid>
:指定对象的pid
1
| app = xlwings.apps[<pid>]
|
获取所有应用程序对象的个数
对工作簿的操作
app
:应用程序对象
创建工作簿对象
创建新的工作簿
在新的应用程序上创建工作簿
- 创建一个新的应用程序对象,然后利用这个对象创建一个新的工作簿
<name>
:指定文件名
1 2 3
| book = xlwings.Book()
book = xlwings.Book("<name>")
|
在当前选中的应用程序上创建工作簿
<name>
:指定文件名
1 2 3
| book = app.books.add()
book = app.books.add("<name>")
|
使用已经存在的工作簿
在新的应用程序上打开工作簿
<src>
:Excl文件的路径
1
| book = xlwings.Book(r"<src>")
|
在当前选中的应用程序上打开工作簿
<src>
:Excl文件的路径
1
| book = app.books.open(r"<src>")
|
保存工作簿
- 如果不指定文件的保存路径,会默认在当前目录保存名为
工作簿1.xlsx
的文件
- 如果保存时文件名相同,那么表示保存
- 如果保存时文件名不同,那么表示另存为
<src>
:指定文件的保存路径
1 2 3
| book.save()
book.save("<src>")
|
关闭工作簿
对工作表的操作
book
:工作簿对象
创建工作表
- 如果不指定排列的位置,那么默认将新的工作表放到最前面
before=""
:将新创建的工作表放到指定表前面
after=""
:将新创建的工作表放到指定表后面
1 2 3
| book.sheets.add()
book.sheets.add("工作表名")
|
获取工作表对象
通过工作表名获取
1
| sheet = book.sheets("工作表名")
|
通过工作表索引获取
获取当前处于焦点的工作表
1
| sheet = book.sheets.active
|
获取工作表数量
获取当前工作表名
获取当前工作表索引
删除工作表
对单元格的操作
app
:应用程序对象
sheet
:工作表对象
自动调整行高或列宽
1 2 3 4 5
| sheet.autofit("1")
sheet.autofit("A")
|
获取所有单元格
选取单元格
选取一个单元格
"A1"
:单元格编号,字母表示当前单元格列编号,数字表示当前单元格行编号
(1, 1)
:数轴坐标,左上角单元格视为(1,1)
点,第一个数表示行索引,第二个数表示列索引
通过类对象选取单元格
1 2
| cell = xlwings.Range("A1") cell = xlwings.Range((1, 1))
|
通过app对象选取单元格
1 2
| cell = app.range("A1") cell = app.range((1, 1))
|
通过sheet对象选取单元格
1 2
| cell = sheet.range("A1") cell = sheet.range((1, 1))
|
通过sheet数组选取单元格
1 2
| cell = sheet["A1"] cell = sheet[0, 0]
|
选取一组单元格
A1:B2
:利用单元格编号选取,第一个编号表示选取区域的左上角,第二个编号表示选取区域的右下角
(1, 1), (2, 2)
:利用两个数轴坐标来选取,第一组坐标表示选取区域的左上角
通过类对象选取单元格
1 2
| xlwings.Range("A1:B2") xlwings.Range((1, 1), (2, 2))
|
通过app对象选取单元格
1 2
| app.range("A1:B2") app.range((1, 1), (2, 2))
|
通过sheet对象选取单元格
1 2
| sheet.range("A1:B2") sheet.range((1, 1), (2, 2))
|
通过sheet数组选取单元格
从左上角开始选取
2
:指定选取区域右下角单元格所在的行数
3
:指定选取区域右下角单元格所在的列数
将选中的区域偏移
row_offset=1
:行偏移,正数表示向下偏移,负数表向上偏移
column_offset=1
:列偏移,正数表示向右偏移,负数表向左偏移
1
| cell.offset(row_offset=1, column_offset=1)
|
调整选中区域的大小
row_size=1
:调整后选中的行的数量
column_size=1
:调整后选中的列的数量
1
| cell.resize(row_size=1, column_size=1)
|
选取全部有数据的单元格
1
| sheet["A1"].expand("table")
|
扩展区域
mode=""
:填充的模式
down
:向下填充
right
:向右填充
table
:向右下填充
修改单元格内容
赋值为单个数据
赋值为一组数据
横向填充一组数据
1 2 3 4 5
| cell.value = []
cell.options(transpose=False).value = []
cell.options(expand="right").value = []
|
纵向填充一组数据
1 2 3
| cell.options(transpose=True).value = []
cell.options(expand="down").value = []
|
斜向填充一组数据
- 将一组数据从当前单元格位置向右下方向选中一个矩形区域进行填充
1
:为选中区域第1行第1列赋值
2
:为选中区域第1行第2列赋值
3
:为选中区域第2行第1列赋值
4
:为选中区域第2行第2列赋值
1
| cell.options(expand="table").value = [(1, 2), (3, 4)]
|
自动填充扩展区域
mode=""
:填充的模式
down
:向下填充
right
:向右填充
table
:向右下填充
获取单元格内容
一维的数据
1 2 3
| cell.value
cell.value.options(ndim=1)
|
二维的数据
1
| cell.value.options(ndim=2)
|
修改单元格样式
修改表格背景色
1 2 3
| cell.color = (255, 255, 255)
cell.color = 0xFFFFFF
|
合并/取消合并单元格
api
对象访问的是winpy32
对象,所以这些操作只能在Windows上生效
cell
:选择一组相邻的单元格对象
1 2 3
| cell.api.merge()
cell.api.unmerge()
|
修改字体样式
设置字体名称
<name>
:字体名称
1
| cell.api.Font.Name = <name>
|
设置字体颜色
1 2 3
| cell.api.Font.Color = (255, 255, 255)
cell.api.Font.Color = 0xFFFFFF
|
设置字体字号
<num>
:字号
1
| cell.api.Font.Size = <num>
|
设置字体加粗
1
| cell.api.Font.Bold = True
|
修改文字对齐方式
水平对齐方式
<num>
:参数
-4108
、xlwings.constants.HAlign.xlHAlignCenter
:缺省值,水平居中
-4131
:水平靠左
-4152
:水平靠右
1
| cell.api.HorizontalAlignment = <num>
|
垂直对齐方式
<num>
:参数
-4108
、xlwings.constants.VAlign.xlHAlignCenter
:缺省值,垂直居中
-4160
:垂直靠上
-4107
:垂直靠下
-4130
:自动换行对齐
1
| cell.api.VerticalAlignment = <num>
|
修改边框样式
选择想要设置的边框
<num>
:参数
5
:从区域中每个单元格的左上角到右下角的边框
6
:从区域中每个单元格的左下角到右上角的边框
7
:区域左边框
8
:区域顶边框
9
:区域底边框
10
:区域右边框
11
:区域中所有单元格的垂直边框
12
:区域中所有单元格的水平边框
设置边框类型
<type>
:参数
1
:实线
-4115
:虚线
4
:1点1划相间线
5
:2点1划相间线
-4118
:点式线
-4119
:双线
-4142
:无线
13
:倾斜的划线
1 2 3
| cell.api.Borders.LineStyle(<type>)
cell.api.Borders(<num>).LineStyle(<type>)
|
边框粗细
<weight>
:粗细值
1 2 3
| cell.api.Borders.Weight(<weight>)
cell.api.Borders(<num>).Weight(<weight>)
|
修改数据格式
1
| cell.api.NumberFormat = "0.00"
|
删除单元格
删除整行/整列
指定行编号/列编号
1
:行编号,冒号两侧的值相同
A
:列编号,冒号两侧的值相同
1 2 3
| sheet.range("1:1").delete()
sheet.range("A:A").delete()
|
指定单元格
1 2 3
| cell.api.EntireRow.Delete()
cell.api.EntireColumn.Delete()
|
清楚单元格数据或样式
清除所有单元格的数据
清除所有单元格的数据和格式
清除指定单元格的数据
清除指定单元格的数据和格式
获取最后一行/列
1
| cell.current_region.last_cell.row
|
1
| cell.current_region.last_cell.column
|
从当前列第一行选取到最后一行
1
| sheet["A1:A{}".format(sheet["A1"].current_region.last_cell.row)]
|
将颜色转换成数值
1
| xlwings.utils.rgb_to_int((255, 255, 255))
|
未完待更
参考文献
哔哩哔哩——千锋教育