用 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(可迭代对象)