在Python中,openpyxl和xlrd是处理Excel文件的常用库,但它们的适用场景、功能特点和支持的文件格式有显著区别。以下是对两者的详细解析:
1. xlrd库
核心功能
- 主要用于读取Excel文件(早期版本支持写入,新版本已移除写入功能)。
- 支持的文件格式:
.xls(Excel 97-2003格式,二进制格式)。- 旧版本(
xlrd < 2.0)支持.xlsx,但2.0及以上版本仅支持.xls(因维护成本问题移除了对.xlsx的支持)。
特点
- 轻量级:安装包小,依赖少。
- 兼容性:对老旧的
.xls格式支持稳定,适合处理历史遗留文件。 - 功能限制:
- 新版本(≥2.0)仅支持读取,无写入功能。
- 对
.xlsx的支持被移除,如需处理.xlsx需降级到xlrd 1.2.0(但不推荐,存在安全隐患)。
基本用法
import xlrd
# 打开.xls文件
workbook = xlrd.open_workbook("example.xls")
# 获取所有工作表名
sheet_names = workbook.sheet_names()
# 选择第一个工作表
sheet = workbook.sheet_by_index(0) # 或 workbook.sheet_by_name("Sheet1")
# 读取单元格数据(行、列索引从0开始)
cell_value = sheet.cell_value(rowx=0, colx=0) # 读取A1单元格
# 读取整行/整列
row_data = sheet.row_values(0) # 第一行数据
col_data = sheet.col_values(0) # 第一列数据
2. openpyxl库
核心功能
- 支持读取和写入Excel文件,专注于现代格式。
- 支持的文件格式:
.xlsx(Excel 2007+格式,基于XML的开放格式)。.xlsm(带宏的Excel文件)。- 不支持
.xls(需转换为.xlsx后处理)。
特点
- 功能全面:支持单元格样式(字体、颜色、边框)、公式、图表、合并单元格等高级操作。
- 活跃维护:持续更新,兼容性好,对
.xlsx的支持完善。 - 扩展性:可与
pandas等库结合使用(如pandas.read_excel可指定engine='openpyxl')。
基本用法
from openpyxl import load_workbook, Workbook
# 读取现有.xlsx文件
workbook = load_workbook("example.xlsx")
# 获取工作表
sheet = workbook.active # 当前活跃工作表
# 或指定工作表:workbook["Sheet1"]
# 读取单元格(行、列索引从1开始)
cell_value = sheet["A1"].value # 或 sheet.cell(row=1, column=1).value
# 写入数据
sheet["B2"] = "Hello, openpyxl"
sheet.cell(row=3, column=3).value = 123
# 新建工作表并保存
new_sheet = workbook.create_sheet("NewSheet")
new_sheet["A1"] = "New Data"
workbook.save("updated_example.xlsx") # 必须调用save()才会生效
3. 关键区别对比
| 维度 | xlrd | openpyxl |
|---|---|---|
| 支持格式 | .xls(≥2.0);旧版支持.xlsx | .xlsx、.xlsm(不支持.xls) |
| 读写能力 | 仅读取(≥2.0) | 读写皆可 |
| 高级功能 | 基本数据读取,无样式支持 | 支持样式、公式、图表等 |
| 维护状态 | 基本停滞(专注.xls) | 活跃更新 |
| 适用场景 | 处理老旧.xls文件 | 处理现代.xlsx文件(读写) |
4. 如何选择?
- 若需处理**
.xls文件**:使用xlrd(推荐版本xlrd==1.2.0以兼容部分.xlsx,但优先考虑转换格式)。 - 若需处理**
.xlsx文件**(读写、样式等):优先使用openpyxl。 - 若需与
pandas结合:读取.xlsx时指定engine='openpyxl',读取.xls时用engine='xlrd'。
总结
xlrd是处理老旧.xls格式的轻量选择,而openpyxl是处理现代.xlsx格式的全面解决方案。实际开发中,建议优先使用openpyxl,并将.xls文件转换为.xlsx以获得更完善的功能支持。
140

被折叠的 条评论
为什么被折叠?



