• Python xlrd和xlwt操作Excel实现自动化



    活动地址:CSDN21天学习挑战赛

    一、7大库优缺点对比

    库名称功能描述优缺点
    openpyxl读写Excel 的xlsx/xlsm/xltm/xltx文件简单易用,功能广泛,单元格格式/图片/表格/公式/筛选/批注/文件保护等功能应有尽有;缺点是对VBA的支持不够好,读取文件效率较其他库低。
    xlutilsxlrd/xlwt 老牌Python包 xlrd:读xls/xlsx xlwt:写xls xlutils=xlrd+xlwt读写效率高,功能单一;不支持写xlsx文件
    xlsxwriter创建xlsx文件支持图片/表格/图表/筛选/格式/公式等,功能与openpyxl相似,优点是相比openpyxl还支持VBA文件导入,缺点是不能打开/修改已有文件
    win32com不仅可以处理Excel,还可以处理office;该库不单独存在,可以通过安装pywin32获取。相当于是windows COM的封装,自身并没有很完善的文档,新手使用会有点痛苦。
    xlwings支持xls读,xlsx读写。可结合VBA实现对Excel编程支持numpy array 和pandas DataFrame数据类型。除读写等基本操作外,大部分功能通Win32 COM PAI 实现。
    pandas Pandas将Excel作为输入/输出数据的容器。数据处理才是pandas的主要用途。读取xls调用xlrd,读取xlsx调用xlrd或openpyxl。写入Excel调用openpyxl或xlswriter。
    Microsoft Excel API直接与Excel进程通信需安装pywin32,可以做任何在Excel里可以做的事情,但比较慢。

    二、xlrd读取Excel表

    xlrd读取Excel表数据非常快,支持.xls.xlsx

    1、安装xlrd模块

    pip install xlrd
    
    • 1

    在这里插入图片描述

    2、xlrd读取Excel表

    1)打开Excel表

    在这里插入图片描述
    错误:
    在这里插入图片描述
    xlrd-2.0.1不支持xlsx,需要卸载,安装1.2版本,需要自行解决

    pip install xlrd=1.2.0
    
    • 1

    2)获取全部表名

    在这里插入图片描述

    import xlrd
    #打开文件
    wb = xlrd.open_workbook("test.xls")
    
    list_name = wb.sheet_names()
    print(list_name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3)指定sheet表

    在这里插入图片描述

    import xlrd
    #打开文件
    wb = xlrd.open_workbook("test.xls")
    
    #按名称指定
    sheet1 = wb.sheet_by_name('test')
    print(sheet1)
    #按索引指定,索引是从0开始计算
    sheet2 = wb.sheet_by_index(0)
    print(sheet2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4)sheet表的行操作

    • 参数列表:行数rowx从0开始算起,不包含结束列end_colx,默认值None
    方法说明
    Sheet.nrows获取该sheet中的有效行数
    Sheet.row(rowx)获取sheet中的第rowx行数据 行数rowx从0开始算起
    Sheet.row_slice( rowx=*, start_colx=0, end_colx=None)获取sheet中rowx行指定列(开始列start_colx,结束列end_colx前)的数据(包含了数据类型) 行数rowx从0开始算起,不包含结束列end_colx
    Sheet.row_values(rowx=*, start_colx=0, end_colx=None)获取sheet中rowx行指定列(开始列start_colx,结束列end_colx前)的数据(不包含数据类型) 行数rowx从0开始算起,不包含结束列end_colx
    Sheet.row_len(rowx)获取第rowx行的有效单元格长度

    在这里插入图片描述

    import xlrd
    # 打开文件
    wb = xlrd.open_workbook("test.xls")
    # 通过sheet索引获得sheet对象
    sheet = wb.sheet_by_index(0)
    print(sheet)
    # 获取该表总行数
    nrows = sheet.nrows
    print("总行数是:", nrows)
    # 显示单行数据,索引从0开始计算
    print(sheet.row(0))
    # sheet.row(0) == sheet.row_slice(0)   效果相同
    print(sheet.row_slice(0))
    # 显示单行数据 索引从0开始计算
    print(sheet.row_values(1))
    # rowx第几行,start_colx从第几列开始,第几列结束 默认值end_colx=None
    print(sheet.row_values(rowx=2, start_colx=0, end_colx=1))
    # 行的有效长度
    print("行的有效长度:", sheet.row_len(0))
    # 循环打印里面所有数据
    for i in range(nrows):
        print(sheet.row_values(i))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4)sheet表的列操作

    • 参数列表 列数colx从0开始算起,不包含结束行end_rowx,默认值None
    方法说明
    Sheet.ncols获取某sheet中的有效列数
    Sheet.col()或Sheet.col_slice(colx, start_rowx=0, end_rowx=None)获取sheet中第colx列从start_rowx行到end_rowx行的数据(包含了数据类型)
    Sheet.col_values(self, colx, start_rowx=0, end_rowx=None)获取sheet中第colx列从start_rowx行到end_rowx行的数据(不包含数据类型)

    在这里插入图片描述

    import xlrd
    
    # 打开文件
    wb = xlrd.open_workbook("test.xls")
    # 通过sheet索引获得sheet对象
    sheet = wb.sheet_by_index(0)
    print(sheet)
    # 获取该表总列数
    ncols = sheet.ncols
    print("总列数是:", ncols)
    # 显示单列数据,索引从0开始计算
    print(sheet.col(0))
    # sheet.col(0) == sheet.col_slice(0)   效果相同
    # 带列名
    print(sheet.col_slice(0))
    print("=" * 40)
    # 不带列名
    print(sheet.col_slice(0, 1))
    print("=" * 40)
    # 循环打印里面所有数据
    for i in range(ncols):
        print(sheet.col_values(i))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    三、xlwt写入Excel表

    xlwt写入Excel表数据,支持.xls.xlsx

    1、安装xlwt包

    pip install xlwt
    
    • 1

    在这里插入图片描述

    2、写入单条数据

    在这里插入图片描述
    在这里插入图片描述

    import xlwt
    
    # 创建Excel对象 并指定编码格式
    ws = xlwt.Workbook(encoding='utf-8')
    # 创建sheet表
    sheet = ws.add_sheet('sheet1')
    # 第一个参数是行
    # 第二个参数是列
    # 第三个参数需要写入的内容
    sheet.write(0, 0, 'python')
    # 保存数据名字和格式
    ws.save('test1.xls')
    
    # 保存正常,但是打开报错,后续在解决
    ws.save('test2.xlsx')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3、多条数据写入

    import xlwt
    
    # 定义写入数据
    data_list = [("张三", 35, '男'), ('李四', 32, '男'), ('凤姐', 33, '女'), ('小明', 12, '男')]
    # 创建Excel对象 并指定编码格式
    ws = xlwt.Workbook(encoding='utf-8')
    # 创建sheet表
    sheet = ws.add_sheet('sheet1')
    # 自定义列名表头
    col_name = ('姓名', '年龄', '性别')
    # 循环写入sheet表单第一行
    for i in range(0, len(col_name)):
        sheet.write(0, i, col_name[i])
    # 循环写入数据
    for i in range(0, len(data_list)):
        data = data_list[i]
        for j in range(0, len(col_name)):
            sheet.write(i + 1, j, data[j])
    ws.save('test1.xls')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    结果:
    在这里插入图片描述

    4、设置宽度和高度

    sheet.col(“行索引”).width = 256 * 24
    sheets.row(“行索引”).height_mismatch = True 默认行高是和文字的高度进行匹配的,即 值是 False,我们设置行高不会生效
    sheets.row(“行索引”).height = 20*20 # 其中一个20代表单位,想要行高是多少乘以多少就行了。

    import xlwt
    
    # 定义写入数据
    data_list = [("张三", 35, '男'), ('李四', 32, '男'), ('凤姐', 33, '女'), ('小明', 12, '男')]
    # 创建Excel对象 并指定编码格式
    ws = xlwt.Workbook(encoding='utf-8')
    # 创建sheet表
    sheet = ws.add_sheet('sheet1')
    # 自定义列名表头
    col_name = ('姓名', '年龄', '性别')
    # 循环写入sheet表单第一行
    for i in range(0, len(col_name)):
        # 设置宽度
        sheet.col(i).width = 256 * 24
        # 设置高度
        sheet.row(i).height_mismatch = True
        sheet.row(i).height = 20*20
        sheet.write(0, i, col_name[i])
    # 循环写入数据
    for i in range(0, len(data_list)):
        data = data_list[i]
        for j in range(0, len(col_name)):
            sheet.write(i + 1, j, data[j])
            # 设置高度
            sheet.row(i+1).height_mismatch = True
            sheet.row(i+1).height = 20*20
    
    ws.save('test1.xls')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    5、自定义单元格样式

    参数说明:

    参数说明
    xlwt.Font()字体设置
    xlwt.Patter()背景设置
    xlwt.Borders()边框设置
    xlwt.Alignment()对准设置
    import xlwt
    
    # 定义写入数据
    data_list = [("张三", 35, '男'), ('李四', 32, '男'), ('凤姐', 33, '女'), ('小明', 12, '男')]
    # 创建Excel对象 并指定编码格式
    ws = xlwt.Workbook(encoding='utf-8')
    # 创建sheet表
    sheet = ws.add_sheet('sheet1')
    
    # 实例化表格样式对象
    xstyle = xlwt.XFStyle()
    
    # 设置字体样式
    xfont = xlwt.Font()
    xfont.colour_index = 0x04  # 设置字体颜色
    xfont.bold = True  # 字体加粗
    xfont.height = 20 * 18  # 设置字体高度(20是基数不变,18是字号用于调整大小)
    xfont.underline = 0x01  # 设置字体带下划线
    xfont.name = '华文彩云'  # 设置字体
    
    # 将字体对象赋值给样式对象
    xstyle.font = xfont
    
    # 自定义列名表头
    col_name = ('姓名', '年龄', '性别')
    # 循环写入sheet表单第一行
    for i in range(0, len(col_name)):
        # 设置宽度
        sheet.col(i).width = 256 * 24
        # 设置高度
        sheet.row(i).height_mismatch = True
        sheet.row(i).height = 20 * 20
        sheet.write(0, i, col_name[i], style=xstyle)
    # 循环写入数据
    for i in range(0, len(data_list)):
        data = data_list[i]
        for j in range(0, len(col_name)):
            sheet.write(i + 1, j, data[j], style=xstyle)
            # 设置高度
            sheet.row(i + 1).height_mismatch = True
            sheet.row(i + 1).height = 20 * 20
    
    ws.save('test1.xls')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这里插入图片描述

  • 相关阅读:
    Codeforces Round #802 (Div. 2)(A-D)
    Discuz论坛帖子标题随机高亮颜色,拒绝千篇一律!
    prometheus监控java应用的jvm指标
    Servlet之重定向和请求转发
    html静态网页设计制作 HTML我的家乡沧州网页代码 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
    多线程批量下载ERA5逐日数据
    微软同“亲女儿”小冰单飞后的再联手,AI 数字员工可行吗?
    四元数的可视化
    使用Matplotlib画多y轴图
    Docker容器之Consul部署
  • 原文地址:https://blog.csdn.net/walykyy/article/details/126269993