当前位置: 首页 > 工具软件 > Python-xlsx > 使用案例 >

Python解析xlsx文件库(xlrd与openpyxl)详细对比

薄高懿
2023-12-01

序言

之前项目的脚本一直在用xlrd解析xlsx文件,后来出了点问题,以为是xlrd版本过时,就用openpyxl重写一下,写完之后发现问题并不是出在xlrd本身,后来就用这两个库同时解析,相当于互相校验了。希望本文能给有需要的同学提供一个参考。

安装库

xlrd

pip3 install xlrd=1.2.0

1.2.0之后的版本不再支持xlsx文件,只支持xls文件了,但我们日常使用估计90%以上都是xlsx文件了,因此只能安装1.2.0这个特定版本。

openpyxl

pip3 install openpyxl

引用库

xlrd

import xlrd

openpyxl

import openpyxl

加载工作簿

xlrd

wb = xlrd.open_workbook(xlsxPath,encoding_override='utf-8')

openpyxl

wb = openpyxl.load_workbook(xlsPath, data_only=True)

这里如果不加 data_only=True 单元格公式读出的内容是公式,而不是结果。

读取工作表

xlrd

sheetNames = list(wb.sheet_names())
for sheetname in sheetNames:
  sheet = wb.sheet_by_name(sheetname)
  ...

openpyxl

sheetNames = wb.sheetnames
for sheetname in sheetNames:
  sheet = wb[sheetname]
  ...

获取总行数,总列数

xlrd

rowCount = sheet.nrows
colCount = sheet.ncols

openpyxl

rowCount = sheet.max_row
colCount = sheet.max_column

读取单元格

xlrd

for row in range(0,rowCount):
  for col in range(0,colCount):
    cellValue = sheet.cell(row,col).value
    if cellValue == None:
      continue
    ...

openpyxl

for row in range(1,rowCount+1):
  for col in range(1,colCount+1):
    cellValue = sheet.cell(row,col).value
    if cellValue == None:
      continue
    ...

特别注意下 openpyxl 的行列索引是从1开始的。
另外,有些数字读出来两者格式会有一些差异,这个需要根据情况自行处理下。

其它

其它方法参数请参考API文档吧
xlrd
https://xlrd.readthedocs.io/en/latest/

openpyxl
https://openpyxl.readthedocs.io/en/stable/

总体上说两者功能上比较接近,性能上xlrd的读取速度明显要优于openpyxl,但一般使用场景对性能要求没那么高的可以忽略。而对于新特性的支持方面,openpyxl显然更有优势,至少我们可以用到他的新版本,而xlrd我们目前只能停留在1.2.0这个特定版本上了。

 类似资料: