python中通过xlwt、xlrd和xlutils三个模块操作xls文件。这三个模块的区别如下:
xlwt: xlwt用于在内存中生成一个xlsx/xls对象,增加表格数据,并把内存中的xls对象保存为本地磁盘xls文件。
xlrd:xlrd用于把本地xls文件加载到内存中,可以读取xls文件的表格数据,查询xls文件的相关信息。
xlutils:xlutils模块是xlrd和xlwt之间的桥梁,读取xls文件可以使用xlrd,新建创建文件可以使用xlwt,而修改文件则使用xlutils;可以使用xlutils模块中的copy模块拷贝一份通过xlrd读取到内存中的xls对象,就可以在拷贝对象上像xlwt中那样修改xls表格的内容,并保存到本地。
除此之外,还有一些其他的模块也可以用于操作excel文件,如xlwings、openyxl、xlsxwriter、win32com和pandas库
# 创建一个excel对象
excel = xlwt.Workbook(encoding='utf-8', style_compression=0)
# 然后添加一个sheet表单
sheet1 = excel.add_sheet("sheet1", cell_overwrite_ok=True)
# 添加自己想写入表单的数据
sheet1.write(0,0,"name") #向(0,0)单元格写入name
sheet1.write(0,1,"age") #向(0,1)单元格写入age
sheet1.write(1,0,"小明") #向(1,0)单元格写入小明
sheet1.write(1,1,18) #向(1,1)单元格写入18
# 保存文件
excel.save(u"exapmle.xls")
# 打开excel文件
excel = xlrd.open_workbook("exapmle.xls", style_compression=0)
# 打开sheet表单
sheet1 = excel.sheet_by_name("sheet1", cell_overwrite_ok=True) #通过表单名打开表单
sheets = excel.sheets() # 获取所有sheets数
sheet1 = excel.sheet_by_index(0) #通过表单的序号打开表单,序号从0开始
sheet1 = excel.sheets()[0] # 同样获取表单
row_data = sheet1.row_values(0) # 获取第一行数据 type是list
col_data = sheet1.col_values(0) # 获取第一列数据 type是list
# 获取表单中单元格的值
cell_value0_0 = sheet1.cell(0,0).value #获取单元格(0,0)的值
cell_value0_1 = sheet1.cell_value(0,1) #获取单元格(0,1)的值
cell_value1_0 = sheet1.cell_value(1,0) #获取单元格(1,0)的值
cell_value1_1 = sheet1.cell(1,1).value #获取单元格(1,1)的值
#输出获取到的结果
print(cell_value0_0,cell_value0_1)
print(cell_value1_0,cell_value1_1)
# 除此之外,还可以使用以下方法获取excel中的所有数据
for i in sheet1.get_rows():#使用get_rows()方法,返回一个生成器
print(i)
#获取列数
cols = sheet1.ncols
#获取行数
rows = sheet1.nrows
#输出结果
print(cols,rows)
注: 不管哪个操作,都要先打开相应表单才可以进行后续操作。
xlutils安装包下载链接: https://pypi.python.org/pypi/xlutils
或 http://download.csdn.net/download/dcrmg/10040953
目前最新版本是2.0 ++ 名称是 “xlutils-2.0.0-py2.py3-none-any.whl”
安装指令: pip install xlutils-2.0.0-py2.py3-none-any.whl
# 导入模块
from xlutils.copy import copy
import xlrd
# 打开想要修改的excel文件
excel = xlrd.open_workbook("exapmle.xls")
# 复制想要修改的文件
excel_copy = copy(excel)
# 打开想要修改的表单
sheet1 = excel_copy.get_sheet("sheet1") #此处可以填入序号或者表单名
# 修改想要修改的单元格
sheet1.write(1,0,"小李") #修改(1,0)单元格数据为小李
sheet1.write(1,1,23) #修改(1,1)单元格数据为23
# 保存修改过后的文件
excel_copy.save("exapmle.xls")