zoukankan      html  css  js  c++  java
  • xlrd/xlwt与openpyxl处理Excel的主要区别与效率问题

    区别:

    python中xlrd/xlwt与openpyxl处理Excel的主要区别在于写入操作,其中xlwt针对Ecxec2007之前的版本,即.xls文件,其要求单个sheet不超过65535行,而openpyxl则主要针对Excel2007之后的版本(.xlsx),它对文件大小没有限制。

    效率:

    整体而言,两种包对小文件的读写速度差别不大,而面对较大文件,xlrd/xlwt速度明显优于openpyxl,但因为xlwt无法生成xlsx是个硬伤,所以想要尽量提高效率又不影响结果时,可以考虑用xlrd读取,用openpyxl写入。

    openpyxl的官方文档

    包括数据的处理,图表,透视图,过滤排序,公式等的操作方法

    xlrd/xlwt处理excel数据处理前面我已经写过相关文章,下面简单写个

    Openpyxl的案例

    目的:把两个表中的不同数据红色加粗显示

    import openpyxl
    from openpyxl.styles import colors, Font, PatternFill
    
    wb_a = openpyxl.load_workbook('C:/Users/2xzyyers3/Desktop/a.xlsx')
    wb_b = openpyxl.load_workbook('C:/Users/2xzyyers3/Desktop/b.xlsx')
    # 定义一个方法来获取表格中的某一列的数据对象,返回一个列表
    # 这里我们区分D列(score列)的数据差异
    def get_score(wb):
        sheet = wb.get_active_sheet()
        print(sheet['D10'].value) # 获取D10单元格数据
        return [cellobj.value for cellobj in sheet['D']]
    # 获取两个列表的score列数据,转化为集合,方便获取不同数据
    a_set_data = set(get_score(wb_a))
    b_set_data = set(get_score(wb_b))
    print(a_set_data)
    print(b_set_data)
    difference_data_list = list(a_set_data ^ b_set_data)
    print(difference_data_list)
    
    def get_difference(wb):
        a = wb.get_active_sheet()['D']
        for cellobj in a:
            if cellobj.value in difference_data_list:
                cellobj.font = Font(color=colors.RED, italic=True, bold=True)
                cellobj.fill = PatternFill('solid', fgColor='DDDDDD')
    get_difference(wb_a)
    get_difference(wb_b)
    wb_a.save('C:/Users/2xzyyers3/Desktop/aa.xlsx')
    wb_b.save('C:/Users/2xzyyers3/Desktop/bb.xlsx')
    
    写一个工作薄(.xlsx)
    import random, openpyxl
    wb = openpyxl.Workbook()
    dest_filename = 'empty_book.xlsx'
    
    # 第一个sheet
    sheet_1 = wb.active
    sheet_1.title = 'range names'  # 定义sheet名称
    for row in range(1, 40):
        sheet_1.append(range(600))
    # 第二个sheet
    sheet_2 = wb.create_sheet(title='Pi') # 定义sheet名称
    sheet_2['F5'] = 3.14
    
    sheet_3 = wb.create_sheet(title='Data')
    for row in range(10, 20):
        for col in range(27, 54):
            _ = sheet_3.cell(column=col, row=row, value=random.randint(1, 10))
    wb.save(filename=dest_filename)
    

    效果:

  • 相关阅读:
    react native配置ip真机测试
    APP Store上架QA&注意事项
    iOS 开发】解决使用 CocoaPods 执行 pod install 时出现
    iphoneX适配!!!
    better-scroll和swiper使用中的坑
    js知识巩固
    vue的学习(常用功能)
    vue学习生命周期(created和mounted区别)
    jq常用功能操作
    移动端中遇到的坑(bug)!!!
  • 原文地址:https://www.cnblogs.com/We612/p/10795769.html
Copyright © 2011-2022 走看看