python里面的xlrd模块
一、基本介绍
xlrd:专门用来读取 Excel 文件的第三方库- 支持:
.xls(Excel97-2003)、旧版还支持.xlsx - ⚠️ 重要坑:xlrd 2.0.0 之后不再支持 .xlsx 格式,只支持老式
.xls想要读取 xlsx 有两种方案:- 安装低版本:
pip install xlrd==1.2.0 - 用
openpyxl读取 xlsx,xlrd只用来读 xls
- 安装低版本:
安装
bash
运行
# 新版仅支持 .xls
pip install xlrd
# 想同时支持 xls + xlsx 必须装1.2.0
pip install xlrd==1.2.0
二、常用核心对象
xlrd.open_workbook():打开 Excel 文件,返回工作簿对象 Workbook- workbook.sheets ():获取所有工作表列表
- workbook.sheet_by_name ("Sheet1"):按表名获取工作表
- workbook.sheet_by_index (0):按下标获取工作表(第 1 张表)
- 工作表对象 Sheet:操作行、列、单元格数据
三、常用 API 示例
1. 打开文件,获取工作表
python
运行
import xlrd
# 打开工作簿
wb = xlrd.open_workbook("test.xls")
# 方式1:通过索引获取sheet
sheet = wb.sheet_by_index(0)
# 方式2:通过表名获取
sheet = wb.sheet_by_name("Sheet1")
# 所有表名
sheet_names = wb.sheet_names()
print(sheet_names)
2. 获取表格行列总数
python
运行
rows = sheet.nrows # 总行数
cols = sheet.ncols # 总列数
print(rows, cols)
3. 读取一行、一列数据
python
运行
# 获取第0行所有单元格数据,返回列表
row_data = sheet.row_values(0)
# 获取第1列所有数据
col_data = sheet.col_values(1)
4. 读取单个单元格
python
运行
# 第0行第0列单元格的值
cell_val = sheet.cell_value(0, 0)
# 获取单元格类型(数字、字符串、日期、布尔等)
cell_type = sheet.cell_type(0, 0)
四、单元格常见数据类型(cell_type)
表格
| 常量 | 值 | 类型说明 |
|---|---|---|
| xlrd.XL_CELL_EMPTY | 0 | 空 |
| xlrd.XL_CELL_TEXT | 1 | 字符串 |
| xlrd.XL_CELL_NUMBER | 2 | 数字(int/float) |
| xlrd.XL_CELL_DATE | 3 | 日期 |
| xlrd.XL_CELL_BOOLEAN | 4 | 布尔 |
| xlrd.XL_CELL_ERROR | 5 | 错误值 |
日期类型处理(高频踩坑)
Excel 里的日期在 xlrd 中默认读取为浮点数字,需要转成日期:
python
运行
from datetime import datetime
date_value = sheet.cell_value(1, 2)
# 转成datetime对象
dt = xlrd.xldate_as_datetime(date_value, wb.datemode)
五、完整遍历表格示例
python
运行
import xlrd
wb = xlrd.open_workbook("test.xls")
sheet = wb.sheet_by_index(0)
# 遍历所有行
for i in range(sheet.nrows):
row = sheet.row_values(i)
print(row)
六、高频坑点(面试常问)
- xlrd 2.0+ 无法打开 .xlsx 文件
报错:
xlrd.biffh.XLRDError: Excel xlsx file; not supported解决:
- 降级
pip install xlrd==1.2.0 - 或者改用 openpyxl 读 xlsx
- 数字单元格默认读到 float,整数会变成 10.0,需要手动转 int
python
运行
val = sheet.cell_value(1, 0)
if isinstance(val, float) and val.is_integer():
val = int(val)
-
Excel 空单元格不会返回 None,是空字符串
"" -
xlrd只能读不能写,写入 Excel 需要用:
xlwt(写 xls)、openpyxl(读写 xlsx)
七、相关库搭配
- 读
.xls:xlrd - 写
.xls:xlwt - 读写
.xlsx:openpyxl - 大数据 Excel 推荐:pandas + openpyxl/xlrd
八、面试高频简答题
-
xlrd 最新版本为什么打不开 xlsx?答:xlrd 从 2.0.0 版本开始移除了 xlsx 解析引擎,仅支持 xls 格式,需要降级或者使用 openpyxl 读取 xlsx 文件。
-
Excel 中的日期用 xlrd 读取为什么是浮点数?答:Excel 内部用时间戳(距离基准日期的天数)存储日期,需要通过
xldate_as_datetime转换成标准日期对象。 -
xlrd 可以写入 Excel 吗?不可以,xlrd 仅用于读取;写入 xls 用 xlwt,xlsx 用 openpyxl。
浙公网安备 33010602011771号