在后台回复【阅读书籍】
即可获取python相关电子书~
Hi,我是山月。
前面给大家介绍了xlrd、xlwt的教程??
-
Python自动化办公:xlrd万字教程
-
Python自动化办公:xlwt万字教程
-
Python自动化办公:xlwt教程(二)
今天来给大家介绍山月最常用的:openpyxl。它不仅能直接读写,功能相对于xlrd、xlwt来说也较完整。
由于篇幅较长,文章分为基础和进阶两个部分,现在先来看看基础教程。
01
openpyxl的介绍
1、安装
pip install openpyxl
注意:openpyxl模块只支持xlsx/xlsm/xltx/xltm格式,不支持xls格式。
**2、官方文档:**https://openpyxl.readthedocs.io/en/stable/
02
新建
1、新建工作薄
#?导入openpyxl模块的Workbook类
from?openpyxl?import?Workbook
#?创建一个workbook对象,同时也会创建一个工作表
wb?=?Workbook()
#?调用得到正在运行的工作表。注意:调用工作表的索引默认是0,即默认对第一张工作表进行操作。
ws?=?wb.active
#保存
wb.save("实例.xlsx")
效果:
2、新建工作表
可以使用create_sheet()函数新建一张工作表。
#新建工作表,名称以Sheet1,Sheet2,....自动填充
ws_1?=?wb.create_sheet()????#?默认在结尾处新建一个新的工作表
ws_2?=?wb.create_sheet(0)???#?在当前工作表的指定索引处新建一个工作表
#?用title指定工作表名称
ws_1.title?=?"新建工作表"?
#?新建工作表,并指定名称
ws_3?=?wb.create_sheet(title="新建工作表-2",index=0)
ws_4?=?wb.create_sheet("新建工作表-1",?0)?
#?改变工作表标签颜色,默认为无颜色
ws.sheet_properties.tabColor?=?"F22F27"
实例:
from?openpyxl?import?Workbook
wb?=?Workbook()
ws?=?wb.active
#?改变当前正在运行工作表的标签颜色
ws.sheet_properties.tabColor?=?"F22F27"?
#?在开始位置处新建一张名称为【新建工作表-1】的工作表
ws_1?=?wb.create_sheet("新建工作表-1",?0)?
#?在结尾处新建一张名称为【新建工作表-2】的工作表
ws_2?=?wb.create_sheet()
ws_2.title?=?"新建工作表-2"
#保存
wb.save("实例.xlsx")
效果:
03
操作
1、设置工作薄只读
假设有一个名称为【数据.xlsx】的excel文件,它的内容如下:
如果我们把它设置成只读后,尝试在单元格写入数据的话:
#?导入openpyxl模块的?load_workbook类
from?openpyxl?import?load_workbook
wb?=?load_workbook(filename='数据.xlsx',?read_only=True)?#设置只读
ws?=?wb.active
#读取表格数据
for?row?in?ws.rows:
????for?cell?in?row:
????????print(cell.value)
ws['A9']=88?#尝试写入单元格,会报错
#?关闭文件
wb.close()
结果:
2、工作表操作
#获取工作簿所有工作表名称
print(wb.sheetnames)
#?遍历工作簿所有工作表名称
for?sheet?in?wb:
?print(sheet.title)
?
#获取指定工作表名称
ws?=?wb["新建工作表-1"]
print(ws.title)??
#复制工作表
ws?=?wb["新建工作表-1"]
ws_copy?=?wb.copy_worksheet(ws)?
#删除工作表
#?方式一
ws?=?wb["新建工作表-1"]
wb.remove(ws)
#?方式二
del?wb["新建工作表-1"]
以我们刚刚新建的表格【实例.xlsx】来示例:
#?导入openpyxl模块的load_workbook类
from?openpyxl??import?load_workbook
#打开【例子.xlsx】工作薄
wb?=?load_workbook('实例.xlsx')
#?遍历工作簿所有工作表名称
for?sheet?in?wb:
?print(sheet.title)
#复制工作表
ws?=?wb["新建工作表-2"]
target?=?wb.copy_worksheet(ws)?
#?删除工作表
del?wb["新建工作表-1"]
#获取工作簿所有工作表
print(wb.sheetnames)
结果:
新建工作表-1
Sheet
新建工作表-2
['Sheet', '新建工作表-2', '新建工作表-2 Copy']
3、行列操作
#?获得工作表最大列和最大行
print(ws.max_row)?????#?获取工作表最大行
print(ws.max_column)??#?获取工作表最大列
print(ws.calculate_dimension())??#?获取工作表全部数据的单元格区域
#?插入空行/空列
ws.insert_rows(1)?????#?在第1行插入空行
ws.insert_cols(1)?????#?在第1列插入空列
ws.insert_rows(2,2)???#?从第2行开始插入2行空行,即在2、3行插入空行
ws.insert_cols(2,2)???#?从第2列开始插入2列空列,即在B、C列插入空列
#?删除行/列
ws.delete_rows(2)????#?删除第2行
ws.delete_rows(2,2)??#?从第2行开始删除2行
ws.delete_cols(2)????#?删除第2列
ws.delete_cols(2,2)??#?从第2列开始删除2列
以【数据.xlsx】为例:
from?openpyxl??import?load_workbook
wb?=?load_workbook('数据.xlsx')
ws?=?wb.active
print(ws.max_row)?????#?获取工作表最大行
print(ws.max_column)??#?获取工作表最大列
print(ws.calculate_dimension())??#?获取工作表全部数据的单元格区域
ws.insert_cols(2,2)???#?从第2列开始插入2列空列,即在B、C列插入空