Day20-表格文件操作
姚万里
1.Excel文件读操作
注意:openpyxl只能处理格式是.xlsx的excel文件
import openpyxl
- excel相关的专业术语
工作簿 - 一个excel文件就是一个工作簿
工作表(表) - 一个工作簿中可以有多张表(至少一张表)
单元格 - 保存数据的每个格子
2.2. excel文件读操作
1)加载excel文件获得工作簿对象
openpyxl.load_workbook(文件路径)
wb = openpyxl.load_workbook(‘files/data.xlsx’)
2)获取所有工作表的表名
工作簿对象.sheetnames
names = wb.sheetnames
print(names) # [‘学生成绩’, ‘讲师信息’, ‘Sheet2’, ‘Sheet3’]
3)获取工作表
a. 工作簿对象.active - 获取活跃表(被打开的表)
b. wb[表名] - 获取指定的工作表
sheet1 = wb.active
print(sheet1)
sheet2 = wb[‘学生成绩’]
print(sheet2)
4)获取单元格
a. 表对象.cell(行号, 列号) - 获取指定单元格, 行号和列号都是从1开始的数字
b. 表对象[‘列号行号’] - 获取指定单元格, 列号用大写字母(不常用)
cell1 = sheet1.cell(1, 1)
print(cell1)
cell2 = sheet1[‘D3’]
print(cell2)
5)获取单元格内容
单元格对象.value
print(cell1.value)
print(cell2.value)
6)获取一个表最大行数和最大列数
表对象.max_row - 最大行数
表对象.max_column - 最大列数
max_row = sheet1.max_row
max_column = sheet1.max_column
练习: 写代码获取阿里巴巴2020年股票数据.xlsx文件中所有的数据
2.练习
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)
3.excel文件写操作
import openpyxl
import os
1.获取工作簿
-
获取已经存在的excel文件对应的工作簿:openpyxl.load_workbook(路径)
-
新建一个工作簿(默认有一张表): openpyxl.Workbook()
如果文件已经存在就打开,不存在才创建
if os.path.exists('files/newData.xlsx'):
wb = openpyxl.load_workbook('files/newData.xlsx')
else:
wb = openpyxl.Workbook()
print(wb.sheetnames)
2.添加表
工作簿对象.create_sheet(表名, 下标) - 在指定位置创建指定表,并且返回创建的表对象
sheet1 = wb.create_sheet(‘商品表’)
sheet2 = wb.create_sheet(‘房产信息’, 0)
3.删除表
工作簿对象.remove(表对象)
wb.remove(wb[‘Sheet’])
4.插入数据
单元格对象.value = 数据
wb[‘商品表’].cell(1, 1).value = ‘商品名称’
-1.保存文件
wb.save(‘files/newData.xlsx’)
4.练习
练习:将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')