Bootstrap

Python自动化办公:openpyxl教程(基础)

e676f361c2e1ea951100f6c04f405ca8.gif

在后台回复【阅读书籍】

即可获取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")

效果:

931a4d587d0fe6ce259054408651c623.png

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")

效果:

6ac80aaa5bb1eb861ebea678deb3fa0d.png

03

操作

1、设置工作薄只读

假设有一个名称为【数据.xlsx】的excel文件,它的内容如下:

63b3e15688d977ee9040b273542e2ce7.png

如果我们把它设置成只读后,尝试在单元格写入数据的话:

#?导入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()

结果:

eb19d85d77a7c17889540ccf95d54bed.png

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】来示例:

b9d412ef400ebcad628d4dbf8027784d.png

#?导入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】为例:

be3bb105a25e4b29a437a5cf27e60c1c.png

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列插入空

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;