第九课:Excel文件处理

168 阅读2分钟

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文件

  1. 导入xlwt模块。
  2. 创建一个Workbook对象。
  3. 创建一个Sheet对象。
  4. 使用sheet.write方法把数据写入到Sheet下指定行和列中。如果想要在原来workbook对象上添加新的cell,那么需要调用put_cell来添加。
  5. 保存成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将文件所有内容拷贝到新的文件里面。

  1. 先读取原来的Excel文件。
  2. 然后在读取的sheet上面进行cell的修改,可以使用sheet.put_cell(row,col,ctype,value,None)方法实现。
  3. 再重新创建一个新的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')