python处理Excel常用模块:xlrd/xlwt/xlsxwriter/openpyxl/pandas/win32.com差异比较汇总以及常用使用方法

一、各模块优缺点比较

模块xlrdxlwt xlsxwriteropenpyxlpandaswin32.com
YESNONOYESYESYES
NOYESYESYESYESYES
速度比较快比较快超慢
功能一般一般超强
执行速度

支持处理对xls、xlsx、xlsm,效率较高

只写,并且写入耗时较小,效率高

 

 同样读取Excel,测试过程中,读取速度相较xlrd个人感受慢很多

 

 

注意事项

不支持写操作

不支持xlsx
修改原有Excel里面的内容需要搭配xlutils使用

不支持.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使用完成需要关闭,否则会报错

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值