Tian Jiale's Blog

用 python 操作表格

一、xlrd 和 xlwt

需要先执行 pip3 install xlrd 和 pip3 install xlwt 安装模块

对于 excel 来说,整个 excel 文件称为工作簿,工作簿中的每个页称为工作表,工作表又由单元格组成。

对于 xlrd 和 xlwt,行数和列数从 0 开始,单元格的行和列也从 0 开始,例如 sheet.row_values(2)表示第三行的内容,sheet.cell(1,2).value 表示第二行第三列单元格的内容。

1.xlrd 模块读取 excel 文件

使用 xlrd 模块之前需要先导入 import xlrd,xlrd 模块既可读取 xls 文件也可读取 xlsx 文件。

获取工作簿对象

book = xlrd.open_workbook('excel文件名称')

获取所有工作表名称,结果为列表

names = book.sheet_names()

根据索引获取工作表对象

sheet = book.sheet_by_index(i)

根据名称获取工作表对象

sheet = book.sheet_by_name('工作表名称')

获取工作表行数

rows = sheet.nrows

获取工作表列数

cols = sheet.ncols

获取工作表某一行的内容,结果为列表 【sheet.row(i),列表】

row = sheet.row_values(i)

获取工作表某一列的内容,结果为列表 【sheet.col(i),列表】

col = sheet.col_values(i)

获取工作表某一单元格的内容,结果为字符串或数值 【sheet.cell(0,0),xlrd.sheet.Cell 对象】

cell = sheet.cell_value(m,n)
sheet.cell(m,n).value
sheet.row(m)[n].value
sheet.col(n)[m].value

2.xlwt 写入 excel 文件

使用 xlwt 模块之前需要先导入 import xlwt,xlwt 模块只能写 xls 文件,不能写 xlsx 文件(写 xlsx 程序不会报错,但最后文件无法直接打开,会报错)。

创建工作簿,如果写入中文为乱码,可添加参数 encoding = ‘utf-8’

book = xlwt.Workbook()

创建工作表

sheet = book.add_sheet('Sheet1')

向单元格写入内容

sheet.write(m,n,'内容1')
sheet.write(x,y,'内容2')

保存工作簿,默认保存在 py 文件相同路径下,如果该路径下有相同文件,会被新创建的文件覆盖,即 xlwt 不能修改文件。

book.save('excel文件名称')

二、openpyxl 模块

openpyxl 模块可实现对 excel 文件的读、写和修改,只能处理 xlsx 文件,不能处理 xls 文件,使用之前同样需要先安装该模块,再导入 import openpyxl。

对于 openpyxl,行数和列数都从 1 开始,单元格的行和列也从 1 开始。例如 sheet.cell(1,2).value 表示第一行第二列单元格的内容

1.openpyxl 读取 excel 文件

获取工作簿对象

book = openpyxl.load_workbook('excel文件名称')

获取所有工作表名称

names = book.sheetnames

获取工作表对象

sheet1 = book.worksheets[n]
sheet2 = book['工作表名称']
sheet3 = book[book.sheetnames[n]]

获取工作表名称

title = sheet1.title

获取工作表行数

rows = sheet1.max_row

获取工作表列数

cols = sheet1.max_column

获取某一单元格内容

cell = sheet.cell(1,2).value
sheet['B1'].value

2.行和列生成器

对于 xlrd 模块来说,可直接通过 sheet.row[i]和 sheet.col[i]获取行和列的内容.但是对于 openpyxl 模块来说,无法直接获取某一行或列的内容,openpyxl 模块的 sheet.rows 和 sheet.columns 表示行和列的生成器,即 generator object,需要通过循环或转换成列表、元组的形式得到行或列的值。

如果要获取某一行或者列的内容,可将行、列生成器对象转换成列表或者元组,再循环列表或者元组得到内容。

前面说过 openpyxl 模块的行和列都从 1 开始,但是由于将生成器转化成了列表 list(sheet.rows),而列表的索引从 0 开始,因此 list(sheet.rows)[1]还是表示第二行的内容,不是第一行的内容。

3.openpyxl 写 excel 文件

创建工作簿,如果写入中文为乱码,可添加参数 encoding = ‘utf-8’

book = openpyxl.Workbook()

创建工作表,0 表示创建的工作表在工作薄最前面

sheet = book.create_sheet('工作表名称',0)

向单元格写入内容

sheet.cell(m,n,'内容1')
sheet.cell(x,y,'内容2')

保存工作簿,默认保存在 py 文件相同路径下,如果该路径下有相同文件,会被新创建的文件覆盖。

book.save('excel文件名称')

4.openpyxl 修改 excel 文件

在第 m 行、第 n 列前面插入行、列

sheet.insert_rows(m)
sheet.insert_cols(n)

表示删除第 m 行、第 n 列

sheet.delete_rows(m)
sheet.delete_cols(n)

修改单元格内容

sheet.cell(m,n) = '内容1'
sheet['B3'] = '内容2'

在最后追加行

sheet.append(可迭代对象)