Fork me on GitHub

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)

效果:

posted @ 2019-04-30 14:24  路痴队长  阅读(1582)  评论(0编辑  收藏  举报