xlrd/xlwt与openpyxl处理Excel的主要区别与效率问题
区别:
python中xlrd/xlwt与openpyxl处理Excel的主要区别在于写入操作,其中xlwt针对Ecxec2007之前的版本,即.xls文件,其要求单个sheet不超过65535行,而openpyxl则主要针对Excel2007之后的版本(.xlsx),它对文件大小没有限制。
效率:
整体而言,两种包对小文件的读写速度差别不大,而面对较大文件,xlrd/xlwt速度明显优于openpyxl,但因为xlwt无法生成xlsx是个硬伤,所以想要尽量提高效率又不影响结果时,可以考虑用xlrd读取,用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)
效果: