当我们用python进行excel表格操作,需要导入xlrd或者xlwt库,但我们在使用者两个库时,却可能经常遇到各种报错。这是因为两个库的用法不同造成的,根据库名称也可以比较直观的发现,xlrd库主要用于表格的读取,xlwt则用于表格的写入。
1、 打开文件(获取一个工作表):
import xlrd data = xlrd.open_workbook("01.xls")#打开当前目录下名为01.xls的文档 #此时data相当于指向该文件的指针 table = data.sheet_by_index(0)#通过索引获取,例如打开第一个sheet表格 table = data.sheet_by_name("sheet1")#通过名称获取,如读取sheet1表单 table = data.sheets()[0]#通过索引顺序获取 # 以上三个函数都会返回一个xlrd.sheet.Sheet()对象 names = data.sheet_names() #返回book中所有工作表的名字 data.sheet_loaded(sheet_name or indx) # 检查某个sheet是否导入完毕
2 、对行进行操作:
nrows = table.nrows #获取该sheet中的有效行数 table.row(rowx) #返回由该列中所有的单元格对象组成的列表 table.row_slice(rowx) #返回由该行中所有的单元格对象组成的列表 table.row_types(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据类型组成的列表 table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表 table.row_len(rowx) #返回该行的有效单元格长度
3、对列进行操作:
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)#返回由该列中所有单元格的数据组成的列表
4、 对单元格进行操作:
table.cell(rowx, colx) # 返回单元格对象 table.cell_type(rowx, colx) # 返回单元格中的数据类型 table.cell_value(rowx,colx) #返回单元格中的数据
1、创建和保存
创建一个工作簿,设置编码格式为“utf-8”,默认格式是ASCII,为了方便写入中文,一般都要设置成UTF-8
import xlwt wb = xlwt.Workbook(encoding="utf-8") # 创建一个工作薄 sheet = wb.add_sheet('文件阅读记录表') # 创建一个工作表 wb.save("xlwt_test.xls") # 保存excle文件
2、写入数据
# 在指定行写入一行数据 # 注: xlwt 没有 write_line 之类的方法, 所以要自己逐个单元格写入. data = ['aaa', 'bbb', 'ccc'] rowx = 1 # 假设指定在第二行 for colx, value in enumerate(data): sheet.write(rowx, colx, value) # 在指定列写入一列数据 # 注: xlwt 没有 write_col 之类的方法, 所以要自己逐个单元格写入. data = ['aaa', 'bbb', 'ccc'] colx = 2 # 假设指定在第三列 for rowx, value in enumerate(data): sheet.write(rowx, colx, value)
当想要打开一个已有表格并修改表中数据,则需要同时使用到两个库,xlrd用于打开已有表格,当对数据修改完成或者增加数据,需要用xlwt进行写入并保存。但是两个库的函数无法混用,容易在查找数据、修改数据、保存数据等过程中产生报错,此时可以用xlutils库对表格复制、分割、筛选等,以完成我们想要的操作。
如: