Python操作Excel
Excel文件后缀名:
- xls(旧版,office2003及以前的版本)
- xlsx(新版,office2007开始的版本)
更改后缀名的优化:
- 旧版本后缀名的excel文件只能保存65536条数据,每条数据最多有256列
- 新版后缀名最多能保存1048576行数据,最多有16384列数据
- 新版后缀名文件所占内存极大地缩小
openpyxl:读写xlsx文件
注:读写的三个单位分别是
- 工作簿(workbook)
- 工作表(worksheet)
- 单元格(cell)
一、读
导包
import openpyxl
1.打开文件
语法:load_workbook(路径) - 加载本地已存在的xlsx文件,打开一个文件对象
workbook = openpyxl.load_workbook('学生成绩.xlsx')
print(workbook,type(workbook))
2.查看所有工作表(工作簿对象):sheetnames
all_sheet = workbook.sheetnames
print(all_sheet)
3.指定一张工作表
- 工作簿.active – 打开文件关闭时显示的工作表
- 工作簿[工作表名字] – 打开指定名字的工作表(更好用)
worksheet = workbook['Sheet1']
print(worksheet)
4.读取工作表的数据
- 工作表对象[‘列号行号’]
- 使用列号行号的数字形式读取表格,工作表对象.cell(行号,列号)
print(worksheet['A1'])
print(worksheet.cell(1, 1))
5.使用value查看单元格内容
语法:单元格.value
print(worksheet['A1'].value)
print(worksheet.cell(1, 1).value)
6.查看最大行数、最大列数
- 工作表对象和.max_row – 最大行
- 工作表对象和.max_column – 最大列
print(worksheet.max_row)
print(worksheet.max_column)
7.打印整个工作表数据
# 外层循环代表行
for i in range(1,worksheet.max_row + 1):
for j in range(1,worksheet.max_column + 1):
# \t使用在print中,能够控制打印结果的长度为2的倍数
print(worksheet.cell(i, j).value,end='\t')
print()
二、写
导包
import openpyxl
1.创建xlsx后缀名文件
workbook = openpyxl.Workbook()
2.新建工作表
语法:create_sheet(title,index)
- title:工作表名字,index:新建工作表位置
- index可以不写,默认追加
workbook.create_sheet('一年级一班')
workbook.create_sheet('一年级二班',1)
3.指定工作表
# 打印所有工作表名
all_sheet = workbook.sheetnames
print(all_sheet)
# 指定
sheet = workbook['一年级一班']
4.向工作表中写内容
sheet['AAA1'].value = '小明'
sheet.cell(1,10).value = '小红'
5.删除工作表
语法:remove(工作表对象)
workbook.remove(workbook['Sheet'])
workbook.remove(workbook['一年级二班'])
6.保存关闭重命名
workbook.save('学生信息.xlsx')
7.练习
题目:将学生成绩表所有学生的平均分算出并写回源文件
import openpyxl
workbook = openpyxl.load_workbook('学生成绩.xlsx')
print(workbook.sheetnames)
sheet = workbook['Sheet1']
# 写入列名
sheet.cell(1,6).value = '平均分'
# 从第二行开始遍历每个学生的信息
rows = sheet.max_row
for i in range(2,rows + 1):
sum = 0
for j in range(2,5):
sum += sheet.cell(i,j).value
# 将计算出的平均分写回
# round(数字,小数位数):如果是整数,保持不变
sheet.cell(i,6).value = round(sum / 3,1)
workbook.save('学生成绩.xlsx')
xlrd(读)、xlwt(写):读写xls文件
一、xlrd(读)
导包
import xlrd
1.打开文件
语法:open_workbook()
wb = xlrd.open_workbook('文件.xls')
print(wb)
2.查看工作表名
语法:sheet_names()
print(wb.sheet_names())
3. 选择工作表
- sheet_by_name()
- sheet_by_index()
s1 = wb.sheet_by_name('学生')
s2 = wb.sheet_by_index(0)
print(s1,s2) # 输出结果一致
4. 读取单元格
print(s1.cell(0, 0))
5.使用value获取单元格的内容
print(s1.cell(0, 0).value)
6.查看表格的最大行和最大列数
rows = s1.nrows
cols = s1.ncols
print(rows,cols)
7.读取所有数据
for i in range(rows):
for j in range(cols):
print(s1.cell(i, j).value)
二、xlwt(写)
导包
import xlwt
1.创建文件
workbook = xlwt.Workbook()
2.添加工作表
语法:add_sheet(工作表名)
sheet = workbook.add_sheet('学生')
3.向单元格写入数据
语法:工作表.write(行号,列号,内容)
注:xlwt固定行列号从0开始
titles = ['学号','姓名','年龄']
for i in range(len(titles)):
sheet.write(0,i,titles[i])
info = [
['py001','张三',19],
['py002','李四',20],
['py003','王五','18']
]
for row in range(len(info)):
for col in range(len(info[row])):
sheet.write(row + 1,col,info[row][col])
4.保存关闭重命名
注:不能是空xls文件
workbook.save('文件.xls')