python操作Excel
openpyxl模块
0.介绍
openpyxl是一个Python库,用于读取/写入Excel 2010 xlsx / xlsm / xltx / xltm文件。
它的诞生是因为缺少可从Python本地读取/写入Office Open XML格式的库。
作为openpyxl,对PHPExcel团队的所有赞誉最初都是基于PHPExcel。
安全
默认情况下,openpyxl不能防范二次爆炸或数十亿次的xml笑话攻击。为了防止这些攻击,请安装defusedxml。
必知
在使用openpyxl模块前,需要了解openpyx中名称的概念:
在openpyxl中,主要用到三个概念:Workbook,Sheet,Cell
Workbook:指一个工作簿;
Sheet:指工作簿中的一张表;
Cell:指表中的一个单元格。
openpyxl在读或写时顺序为:打开Workbook,定位Sheet,操作Cell
1. 安装
pip3 install openpyxl
2. 创建工作簿
from openpyxl import Workbook
wb = Workbook()
创建一个工作簿之后,会默认生成一个工作表 (Sheet) 。您可以使用Workbook.active
属性来获取它
ws = wb.active
默认情况下设置为0。除非您修改其值,否则始终将使用此方法获得第一个工作表。
3. 创建工作表
通过 Workbook.create_sheet( ) 方法创建新的工作表
Workbook.create_sheet( ) 的参数依次是title
=表名
,索引=index,默认索引追加在默认的Sheet表后面
# 创建两张表
sheet1 = wb.create_sheet('表1')
sheet2 = wb.create_sheet('表2')
# 表的顺序(Sheet,表1,表2)
4. 保存工作簿
# 保存工作簿,filename='文件的地址'
# 如果文件名相同的话,后面的文件会覆盖原来文件的内容
wb.save('demo.xlsx')
5. 数据的三种写入方式
5.1 通过定位单元格写入
# 语法: 表['单元格名称'] = '值'
sheet1['A1'] = '我是A1' # 不区分大小写
5.2 通过行列定位
# 通过row(行),column(列),定位指定单元格 添加数据
# 第二行第一列的单元格
sheet1.cell(row=2, column=1).value = '你好'
5.3 通过append方法
append( )方法的参数是一个可迭代对象, 可以批量添加, 而且自带默认换行.
# append(iterable)追加,默认从当前表格的末尾追加,自动换行
sheet1.append(['我是A1', '我是B1', '我是C1'])
sheet1.append(['我是A2', '我是B2', '我是C2'])
# 一次追加多行
data_list = [
['1','2','3'],
['4','5','6'],
['7','8','9'],
]
for item in data_list:
sheet1.append(item)
6. 读取本地工作簿
6.1 获取本地工作簿对象
wb = openpyxl.load_workbook(r'D:\demo1.xlsx')
6.2 获取工作簿下的所有表名
# 返回一个列表,每个元素都是表名
names = wb.sheetnames
# 通过for循环查询
for sheet in wb:
print(sheet.title) # 表.title = '表名'
6.3 获取工作簿的表
-
wb.active
始终获取当前工作簿的第一张表
-
通过表名的key
ws = wb['表1']
-
通过表名获取
ws = wb.get_sheet_by_name('表1')
6.4 循环获取由表格的值组成的矩阵
- 即循环表格中的值,这种方法,不能设置读取范围
for row in ws.values:
print(row) # row是每行的数据组成的元组
6.5 可设置范围的读取
循环表中的每一行
可以设置范围 range_string= 'A1:B1' 矩阵范围
min_row=1,min_col=1 最小行从第1行,最小列从第1列 开始默认到数据最大行最大列
max_row=3,max_col=3 最大行只到第3行 ,最大列只到第3列 默认从第一行第一列开始
values_only=True 只读
for row in ws.iter_rows(min_row=2, min_col=2):
for cell in row:
print(cell.value) # cell.value = '单元格的值'
关于三个对象的常用属性
wb.sheetnames | 返回工作簿下的所有表名 |
---|---|
wb.active | 返回第一张表 |
ws.title | 表名 |
cell.value | 单元格的值 |