文章目录
- xlrd能打开的文件类型
- 常规操作
- 行操作
- 实例化一下:
- 列操作
- 实例化一下:
- 单元格操作
- 实例化一下
xlrd能打开的文件类型
- 如果是 csv 文件会报错
- 打开的文件需要时 xls 后缀结尾
import xlrd
ws = xlrd.open_workbook('data.csv')
print(ws)
报错:xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b’\xc8\xd5\xc6\xda,\xca\xd5\xc5’改成 xls 后缀之后,问题解决
import xlrd
ws = xlrd.open_workbook('data.xls')
print(ws)
常规操作
- 根据索引、名称来获取 worksheet 对象
import xlrd
doc = xlrd.open_workbook('data.xls') # 打开excel文件
ws = doc.sheet_by_index(0) # 通过索引打开 指定的worksheet
ws1 = doc.sheet_by_name('澳币历史数据') # 通过名称打开指定的 worksheet
print(ws)
print(ws1)
- 获取总行数
.nrows
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
print(ws.nrows)
- 通过
.get_rows()
获取表中所有的行,返回一个迭代器对象,可以通过 list 和 for 打印出来
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
for row in ws.get_rows():
print(row)
值得注意的是,使用 get_rows 返回的对象是一个生成器,所以如果要对所有的rows进行切片操作的话,需要把整个 get_rows 的结果通过 list 函数来处理一下,使其成为列表,然后再操作,如下:
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
for line in list(ws.get_rows())[0:15]:
print(line)
- 使用
.row(rowx)
获取某一行的信息
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
print(ws.row(0)) # 获取第 0 行
print(ws.row(1))
- 使用
.row_slice(rowx,start_col,end_col)
可以获得一个行中指定的列的切片,而.row(rowx)
只能获得单独的行
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
print(ws.row_slice(1,0,3))
print(ws.row(1))
行操作
nrows = table.nrows #获取该sheet中的有效行数
table.row(rowx) #返回由该行中所有的单元格对象组成的列表(可以指定列索引)
table.row_slice(rowx,start_col,end_col) #返回由该列中所有的单元格对象组成的列表
table.row_types(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据类型组成的列表
table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表
table.row_len(rowx) #返回该列的有效单元格长度
实例化一下:
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
print(ws.row(1))
print(ws.row_types(1))
print(ws.row_slice(1,0,5))
print(ws.row_values(1))
print(ws.row_len(1))
列操作
ncols = table.ncols #获取列表的有效列数
table.col(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_slice(colx, start_rowx=0, end_rowx=None) #返回由该列中所有的单元格对象组成的列表
table.col_types(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据类型组成的列表
table.col_values(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据组成的列表
实例化一下:
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
print(ws.ncols)
print(ws.col(1))
print(ws.col_types(1))
print(ws.col_slice(1,0,5))
print(ws.col_values(1))
单元格操作
table.cell(rowx,colx) #返回单元格对象
table.cell_type(rowx,colx) #返回单元格中的数据类型
table.cell_value(rowx,colx) #返回单元格中的数据
实例化一下
import xlrd
doc = xlrd.open_workbook('data.xls')
ws = doc.sheet_by_index(0)
print(ws.cell(1,2))
print(ws.cell_type(1,2))
print(ws.cell_value(1,2))
有一个比较特殊的单元格操作
.cell_xf_index()
- 这个方法使用的时候要求在
open_workbook
这一步将参数formatting_info = True
import xlrd
doc = xlrd.open_workbook('data.xls',formatting_info=True)
ws = doc.sheet_by_index(0)
for i in list(ws.get_rows()):
print(i)
print(ws.cell_xf_index(1,0))
print(ws.cell_xf_index(1,1))
print(ws.cell_xf_index(2,2))
print(ws.cell_xf_index(3,3))
print(ws.cell_xf_index(4,4))
print(ws.cell_xf_index(5,5))
根据最后打印输出的结果可以看出,
.cell_xf_index()
输出的是XF格式的索引值