一、openpyxl介绍
excel文件后缀名分为xls、xlsx
xls:office2003及以前.
xlsx:office2007及以后
新版office向前兼容.
xlsx文件比xls文件体积缩小(保存同样的数据)
xlsx文件储存的数据量远大于xls文件
xls文件最多储存256列、2^16(65536)行数据
xlsx文件最多1048576行,16384列
1、excel写操作
from openpyxl import Workbook, load_workbook
Workbook:当文件(工作簿)不存在时,使用Workbook方法创建.
使用Workbook创建的文件我们看不到,但是系统知道他的存在,如果想让文件出现,必须保存
load_workbook:当文件(工作簿)已经存在,使用load_workbook加载
wb = Workbook()
创建工作表(worksheet):create_sheet(表名,下标)
下标:代表新建工作表的位置
wb.create_sheet('一年级一班')
wb.create_sheet('一年级一班', 0)
有同名的会在后面+1+2+3…
查看已经存在的表名:sheetnames
sheetlist=wb.sheetnames
print(sheetlist)
指定工作簿中的工作表:
active:指定关闭文件时显示在上层的工作表
指定打开存在的某张表
sheet1=wb.active
print(sheet1)
sheet2=wb['一年级一班']
print(sheet2)
向指定的单元格写入内容,同时也是查看某个单元格内容
工作表[列号行号]->列号表示大写英文字母
工作表.cell(行号,列号)->列表表示从1开始递增的数字
value表示查看单元格的值
print(sheet1.cell(1, 1).value)
sheet1.cell(1,1).value='姓名'
print(sheet1.cell(1, 1).value)
print(sheet2['A1'].value)
sheet2['A1'].value='姓名1'
print(sheet2['A1'].value)
删除已存在的工作表
wb.remove_sheet(wb['Sheet'])
修改工作表名
sheet1.title='一年级二班'
wb.save('学生成绩.xlsx')
二、例子:生成学生成绩表
from openpyxl import load_workbook
from random import randint
1.加载已经存在的文件
wb= load_workbook('学生成绩.xlsx')
print(wb)
查看已经存在的所有工作表
sheetlist=wb.sheetnames
print(sheetlist)
3.指定工作表
sheet=wb['一年级一班']
print(sheet)
4.学生成绩表生成规矩:
存在 姓名、语文、数学、英语 四列;
存在100名学生,姓名列填入 python001~python100;
语文、数学、英语三列从[0,100]随机生成一个整数填入。
column=['姓名','语文','数学','英语']
for i in range(len(column)):
sheet.cell(1,i+1).value=column[i]
for i in range(1,101):
stuName=f'python{i:0>3}'
sheet.cell(i+1,1).value=stuName
for j in range(2,5):
sheet.cell(i+1,j).value=randint(0,100)
保存、关闭
wb.save('学生成绩.xlsx')
debug按钮用法:用于查看代码运行顺序
Step Over:进入下一步代码
Step into:进入到每一行代码的底层代码,查看底层代码执行顺序
Step into my code:进入到自己的每一行代码的底层代码,查看底层代码执行顺序
step out:将进入底层的代码直接一步执行完
run to cursor:运行断点
三、读取学生成绩表
from openpyxl import load_workbook
wb = load_workbook('学生成绩.xlsx')
选择“一年一班”工作表
sheet = wb['一年级一班']
查看工作表的最大列数
max_row
max_column
rows = sheet.max_row
cols = sheet.max_column
print(rows, cols)
for i in range(1, rows + 1):
for j in range(1, cols + 1):
print(sheet.cell(i, j).value)
四、例子:将数据汇总
from openpyxl import load_workbook
1.加载文件
wb = load_workbook('成都二手房.xlsx')
if '汇总' not in wb.sheetnames:
2.创建《汇总》工作表
wb.create_sheet('汇总')
3.查看已存在的所有工作表
sheetList = wb.sheetnames
print(sheetList)
4.先将列名写入到汇总工作表中
for col in range(1, wb[sheetList[0]].max_column + 1):
wb['汇总'].cell(1, col).value = wb[sheetList[0]].cell(1, col).value
5.读除汇总之外的所有表的数据
变量index_控制写入的行号
index_ = 2
for i in sheetList[:-1]:
sheet = wb[i]
# 找最大行列数
rows = sheet.max_row
columns = sheet.max_column
# 遍历每一行
for row in range(2, rows + 1):
# 遍历每一行的每一列
for col in range(1, columns + 1):
# 将每一个单元格写入到汇总表中
wb['汇总'].cell(index_, col).value = sheet.cell(row, col).value
index_ += 1
保存、关闭
wb.save('成都二手房.xlsx')
print('操作完成')