9.python操作excel文件:openpyxl
参考网站:https://www.bilibili.com/video/BV1ys411g7mY?p=24
9.1 知识点:
1)数据定义:
工作簿(excel文件):workbook
工作表:worksheet
行:row
列:column
单元格:cell
2)openpyxl中Excel文件三个对象:
workbook: 工作簿,一个excel文件包含多个sheet。
sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
cell: 单元格,存储数据对象
openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:
打开Workbook,定位Sheet,操作Cell。
3)xlrd和xlwt模块(不支持最新版的excel):
xlrd(读取):xlrd 可以在任意平台上读取的excel为:.xls以及.xlsx;
xlwt(写入):xlwt支持的excel版本是: Microsoft excel版本 95—2003,也就是 xls文件。
注意:openpyxl中工作表的行数和列数都是从1开始,不是从0开始
9.2 安装相关模块并准备数据
1)安装模块
pip install openpyxl # 安装openpyxl模块
2)数据准备
9.3 操作工作簿(excel文件)
1)新建工作簿:wb = openpyxl.Workbook()
新建的工作簿只有一张工作表,表名是"sheet"。
2)打开文件,并赋值:wb = openpyxl.load_workbook("销售数据.xlsx")
3)将工作簿保存到文件:wb.save("销售数据11.xlsx")
保存打开的文件时,最好更换文件名,防止覆盖源文件,导致数据丢失。
4)代码:
9.4 操作工作表(sheet)
1)新建工作表:
(1)新建自定义工作表:wb.create_sheet(title="工作表名", index=数字)
index从0开始,0在最前面。
(2)如果新建默认工作表:wb.create_sheet()
默认使用"Sheet"加数字命名,位置在所有工作表最后。
(3)新建表单时,也可以只输入表单名:wb.create_sheet("工作表名")
2)获取工作表对象
(1)循环遍历所有工作簿中所有工作表对象:for sheet in 工作簿:
(2)获取激活工作表对象:工作簿对象.active
(3)获取指定工作表对象:工作簿对象[“工作表名称”]
3)获取工作表名称
(1)工作簿对象.sheetnames:所有工作表名称列表
(2)工作表对象.title:工作表名称
4)修改工作表的名称
工作表对象.title = “新名称”
5)复制工作表
工作簿对象.copy_worksheet(被复制工作表对象)
执行完copy_worksheet,会自动给新工作表命名“原工作表 Copy”
6)获取工作表行数和列数
工作表对象.max_row # 获取当前工作表的列数
工作表对象.max_column # 获取当前工作表的列数
7)删除工作表
工作簿对象.remove(表单对象)
9.5 操作单元格(cell)
1)获取单元格对象
(1)根据坐标获取单元格对象
(2)根据行数和列数获取单元格,行数和列数的取值从1开始,不是从0开始
2)获取单元格的值、行数、列数、坐标
单元格的值:单元格对象.value
单元格的行数:单元格对象.row
单元格的列数:单元格对象.column
单元格的坐标:单元格对象.coordinate
3)通过循环操作行或列
4)单元格赋值
(1)使用"="赋值
ws["A1"] = "Hello Python"
ws["A2"].value = "你好"
ws.cell(row=3, column=1).value = "Hello World"
(2)使用append整行追加赋值
(3)使用value传参赋值
9.6 操作行和列
openpyxl没有行对象和列对象,行和列的操作本质上是操作多个单元格对象
1)追加整行数据
工作表对象.append(列表、元组)
2)获取行数据
工作表对象[行号]:得到某行所有单元格对象,组成的元组
循环获取多行数据
3)获取列数据
工作表对象["列"]:得到某列所有单元格对象,组成的元组
循环获取多列数据
4)按行或按列输出所有单元格对象
工作表.rows是一个生成器,里面是每一行的数据,一行数据是一个元组,元组由每行所有单元格对象组成
工作表.columns是一个生成器,里面是每一列的数据,一列数据是一个元组,元组由每列所有单元格对象组成
rows和columns的用法基本相同,下面以rows为例讲解它们的用法
使用循环迭代取值
5)列数转化:字母转数字或数字转字母
get_column_letter:数字转化成字母
column_index_from_string:字母转化成数字
6)删除行和删除列
工作表对象.delete_rows(行数)
工作表对象.delete_cols(列数)
9.7 练习一:修改excel数据
1)需求:Produce.xlsx中保存了产品的名称和单价,根据字典修改excel文件中的产品价格。
2)代码:
9.8 练习二:将excel文件转换成字典
1)需求:
将excel中的数据整理成字典,字典格式如下:
{所属部门1: {区域(省份)1: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
区域(省份)2: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
…}
所属部门2: {区域(省份)1: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
区域(省份)2: {当前区域人数: x, 当前区域销售总额: x, 当前区域人员列表: []},
…}
…
}
2)代码:
3)其它文件中的代码,使用生成的数据文件:
9.9 修改单元格格式和新建图表
1)openpyxl提供了单元格格式模块:styles。
2)openpyxl提供了图表模块:char。
单元格格式和图表,不涉及到数据处理,而且在excel中操作更简单方便,此处不再讲述,如有需要可以查询相关资料。