1.sheet相关的操作
最新的xlrd已经废除了对excel表格的操作,所以使用旧版本的xlrd。
import xlrd
# 1.打开一个文件
workbook = xlrd.open_workbook('student.xlsx')
# 2.获取所有名字
print(workbook.sheet_names())
# 3.根据索引获取指定的sheet对象
sheet = workbook.sheet_by_index(0)
print(sheet.name)
# 4.根据名称获取指定的sheet对象
sheet = workbook.sheet_by_name('sheet1')
print(sheet.name)
# 5.获取所有的sheet对象
sheets = workbook.sheets()
for sheet in sheets:
print(sheet.name)
# 6.获取指定sheet的行数和列数
sheet = workbook.sheet_by_index(0)
print(sheet.nrows)
print(sheet.ncols)
2.Cell相关的操作
import xlrd
from xlrd.sheet import Cell
# 1.获得workbook对象
workbook = xlrd.open_workbook('student.xlsx')
# 2.获取sheet对象
sheet = workbook.sheet_by_index(0)
# 3.进行单元格上面的操作
# 3.1 打印单个单元格里面的内容
print(sheet.cell(1,1))
# 3.2 打印一列里面多个数据 col_slice(第几列,开始行,结束行)
print(sheet.col_slice(1,2,4))
# 3.3 打印一行里面的多个数据 row_slice(第几行, 开始列, 结束列)
print(sheet.row_slice(3, 1, 2))
# 3.4 直接打印单元格里面的值
print(sheet.cell_value(1,1))
# 3.5 直接打印特定行或列的几个值
cow_values = sheet.row_values(2, 1, 3)
for cow_value in cow_values:
print(cow_value)
col_values = sheet.col_values(2, 1, 3)
for col_value in col_values:
print(col_value)
3.Cell中常用的数据类型
import xlrd
workbook = xlrd.open_workbook('student.xlsx')
# 1.文本类型
sheet = workbook.sheet_by_index(0)
cell = sheet.cell(0,0)
print(cell.ctype)
print(xlrd.XL_CELL_TEXT)
# 2.数字类型,包括整数,浮点数
cell = sheet.cell(1,1)
print(cell.ctype)
print(xlrd.XL_CELL_NUMBER)
# 3.时间类型
cell = sheet.cell(19,0)
print(cell.ctype)
print(xlrd.XL_CELL_DATE)
cell = sheet.cell(19,0)
print(cell.ctype)
print(xlrd.XL_CELL_BOOLEAN)
# 4.空
cell = sheet.cell(1,1)
print(cell.ctype)
print(xlrd.XL_CELL_EMPTY)
4.写入Excel文件
- 导入xlwt模块。
- 创建一个Workbook对象。
- 创建一个Sheet对象。
- 使用sheet.write方法把数据写入到Sheet下指定行和列中。如果想要在原来workbook对象上添加新的cell,那么需要调用put_cell来添加。
- 保存成Excel文件。
代码示例
import xlwt
import random
workbook = xlwt.Workbook()
sheet1 = workbook.add_sheet('sheet1')
headers = ['name', 'chinese', 'math', 'english']
# 1.写入一行
for index, header in enumerate(headers):
sheet1.write(0, index, header)
# 2.写入一列
names = ['zhangsan', 'lisi', 'wangwu']
for index, name in enumerate(names):
sheet1.write(index+1, 0, name)
# 3.写一个双重循环,分别代表行和列
for row in range(1, 4):
for col in range(1, 4):
sheet1.write(row, col, random.randint(1, 100))
workbook.save('成绩表.xls')
5.编辑Excel文件
在编辑excel文件时,因该先在xlrd的基础之上编辑文件,然后在通过xlwt将文件所有内容拷贝到新的文件里面。
- 先读取原来的Excel文件。
- 然后在读取的sheet上面进行cell的修改,可以使用sheet.put_cell(row,col,ctype,value,None)方法实现。
- 再重新创建一个新的excel文件,然后把之前读取到的数据写入到新的excel文件中。
示例代码
import xlrd
import xlwt
# 1.在原来的文件里面操作cell
read_bookwork = xlrd.open_workbook('student.xlsx')
read_sheet = read_bookwork.sheet_by_index(0)
nrows = read_sheet.nrows
ncols = read_sheet.ncols
# 求出每位同学的总分
for row in range(1, nrows):
col_values = read_sheet.col_values(row, 1, ncols)
total = sum(col_values)
# 写入到原来的文件里面
read_sheet.put_cell(row, ncols+1, xlrd.XL_CELL_NUMBER, total, None)
# 求出每个科目的平局分
for col in range(1,ncols):
col_values = read_sheet.col_values(col, 1, nrows)
avg = sum(col_values) / nrows
# 将平均数写入到原来的文件里面
read_sheet.put_cell(nrows+1, col, xlrd.XL_CELL_NUMBER, avg, None)
# 2.将原来的文件里面的东西通过xlwt拷贝到新的文件里面并保存
writer_workbook = xlwt.Workbook()
write_sheet = writer_workbook.add_sheet('sheet01')
for row in range(1, nrows+1):
for col in range(1, ncols+1):
write_sheet.write(row, col, read_sheet.cell_value(row, col))
writer_workbook.save('new_student.xls')