一、各模块优缺点比较
模块 | xlrd | xlwt | xlsxwriter | openpyxl | pandas | win32.com |
读 | YES | NO | NO | YES | YES | YES |
写 | NO | YES | YES | YES | YES | YES |
速度 | 快 | 快 | 快 | 比较快 | 比较快 | 超慢 |
功能 | 弱 | 弱 | 强 | 一般 | 一般 | 超强 |
执行速度 | 支持处理对xls、xlsx、xlsm,效率较高 | 只写,并且写入耗时较小,效率高 |
| 同样读取Excel,测试过程中,读取速度相较xlrd个人感受慢很多 |
|
|
注意事项 | 不支持写操作 | 不支持xlsx | 不支持.xls格式 | 不支持.xls格式 |
|
|
推荐场景 (个人过往使用经验-仅供参考) | 只读首选推荐 | 输出比较简单的,Excel样式要求不高推荐 | 输出较高版本Excel,追求表格样式颜值,插入图片等推荐使用 | 读写一体,可以保留原始格式修改单元格的值,适合对自动化输出格式有比较复杂要求的需求,比如事先定好空表,并设置自动换行、字体、对其、颜色、边框等等格式,并且这些格式改动比较频繁。据官网介绍适合多进程使用场景 |
|
|
更全的具体使用博客推荐 | 【Python学习】利用xlwt设置Excel单元格格式 - gtea - 博客园 |
二、各模块常用使用方法
1、xlrd
import xlrd
#获取工作簿
wb=xlrd.open_workbook('文件绝对路径/相对路径')
#获取全部工作表名
sheetnames=wb.sheet_names()
#获取工作表内容
sheet_content1 = wb.sheet_by_name('Sheet1')#根据工作表名称获取
sheet_content2 = wb.sheet_by_index(0) #根据工作表索引获取,从下标0开始计数
sheet_content3 = wb.sheets()[0] #根据工作表索引获取,从下标0开始计数
#获取整个表有效总行数总列数
rows_length = sheet_content2.nrows #有效总行数
cols_length = sheet_content2.ncols #有效总列数
# 获取整个表每一行的值,是一个生成器集合,使用需要for循环遍历,存储的结果为:[[全体第一行第1列单元格值类型:'具体值',第2列单元格值类型:'具体值',……],[第二行全部内容],[第三行全部内容]]
rows_content = sheet_content2.get_rows()
#获取具体单元格值
cell_value = sheet_content2.cell_value(0,0) #根据(row,col)索引获取,行列均从下标0开始计数
2、xlwt
官网说明文档:API Reference — xlwt 1.3.0 documentationhttps://xlwt.readthedocs.io/en/latest/api.html
import xlwt
# 定义workbook
wb = xlwt.Workbook()
# 添加sheet,这个sheet的名字叫'Style'
sheet = wb.add_sheet('Sheet1')
#设置Excel格式样式方法:【start】
#①声明一个样式模板,②声明一个具体的样式,③把具体样式塞进样式模板里面,④写Excel表格的时候用样式模版把格式设置上去
#步骤①声明一个样式模板 style_demo
style_demo = xlwt.XFStyle()
# style_demo2 = xlwt.Style.easyxf("Font-name"="微软雅黑";"align":"center")
# help(xlwt.Style.easyxf)
#步骤②声明一个具体的样式
# a.设置字体样式
font_demo = xlwt.Font()
font_demo.name = 'Calibri' # 设置字体 "Calibri/微软雅黑/……"
font_demo.colour_index = 4 # 设置字体颜色值
font_demo.height = 400 # 字体大小
font_demo.bold = False # 字体是否加粗,"True/False"
# b.边框样式
borders_demo = xlwt.Borders()
borders_demo.top_colour = 6
# 设置单元格边框颜色值,注意上下边框,左右边框颜色最好设置一致,左右边框设置不同颜色会出现覆盖,一个单元格右边框是另一个单元格的左边框
borders_demo.bottom_colour = 6
borders_demo.left_colour = 7
borders_demo.right_colour = 4
borders_demo.top = True # 单元格顶部边是否设置边框 "True/False"
borders_demo.bottom = True # 单元格顶部边是否设置边框 "True/False"
borders_demo.left = True # 单元格顶部边是否设置边框 "True/False"
borders_demo.right = True # 单元格顶部边是否设置边框 "True/False"
#步骤③ 把步骤②设置出来的具体样式设置,全部添加到整体样式模板style_demo里面
style_demo.font = font_demo
style_demo.borders = borders_demo
# 设置Excel格式样式方法:【end】
# 设置Excel格式样式其他案例: https://blog.csdn.net/zhouz92/article/details/106833511
# 写入数据
row = 0 # 行
column = 0 # 列
for value in range(72):
sheet.write(row, column, value,style_demo)
# 写入数据,第row行,第column列,具体内容是value,单元格样式使用style_demo(可选,可以不带格式写入使用默认格式)
column += 1
if column > 8:
column = 0
row += 1
result_apth=r'../../mytest.xls' #强行保存为xlsx不会报错,但是结果表打开会报错
# 定义保存Excel的位置和文件名。默认是和代码存在一个路劲下面。
wb.save(result_apth)
3、xlsxwriter
官网说明文档:可以查看字体、单元格各种格式设置的key名称和使用方法
The Format Class — XlsxWriter Documentationhttps://xlsxwriter.readthedocs.io/format.html
颜色配色代码:
http://www.360doc.com/content/13/1120/12/14695328_330723062.shtml http://www.360doc.com/content/13/1120/12/14695328_330723062.shtml%C2%A0
import xlsxwriter
# 定义workbook
wb = xlsxwriter.Workbook(u'../../mytest.xlsx')
# 添加sheet,这个sheet的名字叫'Style'
sheet = wb.add_worksheet('results')
#设置单元格列宽
sheet.set_column('A:L', 10)
sheet.set_column('M:M', 15)
#设置单元格格式样式:单元格加边框,值居中,微软雅黑,9号字体,粉色填充,白色字体;
#单元格格式样式key可以参考官网地址,寻找要设置的格式key名称和对应值域
style_demo = wb.add_format(
{'bold': True, 'align': 'center', 'font_name': '微软雅黑', 'font_size': 9, 'bg_color': '#FF1493',
'font_color': '#FEFEFE'})
# 还有其他格式设置示例可以参考:http://maoyao.blog.51cto.com/8253780/1772102
# 写入数据
row = 0 # 行
column = 0 # 列
for value in range(72):
sheet.write(row, column, value,style_demo) # 写入数据,第row行,第column列,具体内容是value,单元格样式使用style_demo(可选,可以不带格式写入使用默认格式)
column += 1
if column > 8:
column = 0
row += 1
# 定义保存Excel
wb.selected
wb.close() # excel使用完成需要关闭,否则会报错
4、openpyxl
官网说明文档:
openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 3.0.9 documentationhttps://openpyxl.readthedocs.io/en/stable/
import openpyxl
#excel 不存在的情况
wb = openpyxl.Workbook() #新建工作簿
sheet0 = wb.sheetnames[0] #新建工作簿的时候,模块将自动新建一个工作簿名“Sheet”
sheet1 = wb.create_sheet('results2') #工作簿中新建工作表“results2”,不指定名称的时候,默认创建为“Sheet1”,创建新的工作表那么结果Excel将有两个工作表=默认的“Sheet”+新建的
print(sheet0.title)
# ①全体遍历读取单元格数据 --遍历方式有点与众不同
for row in sheet0.rows: #每一个row 就是Excel的一行,读取单个单元格,就需要在遍历row,从里面取出具体值
for cell in row:
print(cell.value)
# ②读取目标单元格的值 --明确单元格行列的情况下
print(sheet0['A1'].value) #取A列第1行,格式必须和Excel操作时单元格的位置一样,不可以用第0行第0列使用sheet['00']不会报错但没值
print(sheet0['A']) #取出第A列的全体单元格,需要取值,则需要再次遍历里面的cell,通过cell.value打印单元格的值,同上面①遍历单元格数据使用方式一致
print(sheet0['A:B']) #取出第A列-B列的全体单元格,取值方式同上
# 带格式修改单元格的值
sheet0.cell(row=1, column=1, value='测试1') #特别注意!,调用cell方法的时候,行列用下标索引形式读取,下标索引从1开始计算
sheet0['B2'] = '测试2'
# # 定义保存Excel
wb.save('file_path.xlsx')#excel结果绝对路径
wb.close() # excel使用完成需要关闭,否则会报错