一.excel文件读操作
注意:openpyxl只能处理格式是.xlsx的excel文件
import os
import openpyxl
-
excel相关的专业术语
工作簿 - 一个excel文件就是一个工作簿
工作表(表) - 一个工作簿中可以有多张表(至少一张表)
单元格 - 保存数据的每个格子 -
excel文件读操作
1)加载excel文件获得工作簿对象openpyxl.load_workbook(文件路径) wb = openpyxl.load_workbook('file/data.xlsx')
2)获取所有工作表的表名
names = wb.sheetnames print(names)
3)获取工作表
工作簿对象.active - 获取活跃表(被打开的表) sheet1 = wb.active print(sheet1)
工作簿对象[表名] - 获取指定的工作表 sheet2 = wb['学生'] print(sheet2)
4)获取单元格
表对象.cell(行号,列号) - 获取指定单元格,行号和列号都是从1开始的数字 cell1 = sheet1.cell(1, 1) print(cell1)
表对象['列号行号'] - 获取指定单元格,列号用大写字母(不常用) cell2 = sheet1['D3']
5)获取单元格内容
单元格对象.value print(cell1.value)
6)获取一个表最大的行数和最大列数
表对象.max_row - 最大行数 表对象.max_column - 最大列数 max_row = sheet1.max_row max_column = sheet1.max_column
二.excel文件写操作
-
获取工作簿
1)获取已经存在的excel文件对应的工作簿:openpyxl.load_workbook(路径)
2)新建一个工作簿(默认有一张表):openpyxl.Workbook()# 如果文件已经存在就打开,不存在才创建 if os.path.exists('file/newData.xlsx'): wb = openpyxl.load_workbook('file/newData.xlsx') else: wb = openpyxl.Workbook() print(wb.sheetnames)
-
添加表
工作簿对象.create_sheet(表名,下标) - 在指定位置创建指定表,并且返回创建的表对象sheet1 = wb.create_sheet('商品表') sheet2 = wb.create_sheet('房产信息', 0)
-
删除表
工作簿对象.remove(表对象)wb.remove(wb['Sheet'])
-
插入数据
单元格对象.value = 数据wb['商品表'].cell(1, 1).value = '商品名称'
-
保存文件
wb.save('file/newData.xlsx')
三.练习
import openpyxl
wb = openpyxl.load_workbook('files/阿里巴巴2020年股票数据.xlsx')
sheet = wb.active
# 获取最大行数和列数
max_r = sheet.max_row
max_c = sheet.max_column
# 获取表中所有的数据
# for row in range(1, max_r+1):
# for col in range(1, max_c+1):
# print(sheet.cell(row, col).value, end=' ')
# print()
# 获取第一列所有的数据
for row in range(2, max_r+1):
print(sheet.cell(row, 1).value)
# 练习:将students中的学生信息插入到'学生信息'表中,字典的键作为表头
students = [
{'stuid': 'stu001', 'name': '小明', 'age': 20, 'score': 90},
{'stuid': 'stu002', 'name': 'stu2', 'age': 19, 'score': 89},
{'stuid': 'stu003', 'name': '张三', 'age': 25, 'score': 78},
{'stuid': 'stu004', 'name': 'lisi', 'age': 30, 'score': 99}
]
import openpyxl
import os
if os.path.exists('files/学校.xlsx'):
wb = openpyxl.load_workbook('files/学校.xlsx')
else:
wb = openpyxl.Workbook()
if '学生信息' not in wb.sheetnames:
sheet = wb.create_sheet('学生信息')
else:
sheet = wb['学生信息']
# 写第1行
keys = list(students[0])
length = len(keys)
for col in range(1, length+1):
sheet.cell(1, col).value = keys[col-1]
# 写学生信息
row = 2
for stu in students:
for col in range(1, length+1):
sheet.cell(row, col).value = stu[keys[col-1]]
row += 1
wb.save('files/学校.xlsx')