python里面的xlrd模块

一、基本介绍

xlrd:专门用来读取 Excel 文件的第三方库
  • 支持:.xls(Excel97-2003)、旧版还支持 .xlsx
  • ⚠️ 重要坑:xlrd 2.0.0 之后不再支持 .xlsx 格式,只支持老式 .xls
     
    想要读取 xlsx 有两种方案:
    1. 安装低版本:pip install xlrd==1.2.0
    2. openpyxl 读取 xlsx,xlrd 只用来读 xls

安装

bash
 
运行
 
 
 
# 新版仅支持 .xls
pip install xlrd

# 想同时支持 xls + xlsx 必须装1.2.0
pip install xlrd==1.2.0
 

二、常用核心对象

  1. xlrd.open_workbook():打开 Excel 文件,返回工作簿对象 Workbook
  2. workbook.sheets ():获取所有工作表列表
  3. workbook.sheet_by_name ("Sheet1"):按表名获取工作表
  4. workbook.sheet_by_index (0):按下标获取工作表(第 1 张表)
  5. 工作表对象 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)
 

六、高频坑点(面试常问)

  1. xlrd 2.0+ 无法打开 .xlsx 文件
     
    报错:xlrd.biffh.XLRDError: Excel xlsx file; not supported
     
    解决:
  • 降级 pip install xlrd==1.2.0
  • 或者改用 openpyxl 读 xlsx
  1. 数字单元格默认读到 float,整数会变成 10.0,需要手动转 int
python
 
运行
 
 
 
val = sheet.cell_value(1, 0)
if isinstance(val, float) and val.is_integer():
    val = int(val)
 
  1. Excel 空单元格不会返回 None,是空字符串 ""
  2. xlrd只能读不能写,写入 Excel 需要用:xlwt(写 xls)、openpyxl(读写 xlsx)

七、相关库搭配

  1. .xls:xlrd
  2. .xls:xlwt
  3. 读写 .xlsx:openpyxl
  4. 大数据 Excel 推荐:pandas + openpyxl/xlrd

八、面试高频简答题

  1. xlrd 最新版本为什么打不开 xlsx?
     
    答:xlrd 从 2.0.0 版本开始移除了 xlsx 解析引擎,仅支持 xls 格式,需要降级或者使用 openpyxl 读取 xlsx 文件。
  2. Excel 中的日期用 xlrd 读取为什么是浮点数?
     
    答:Excel 内部用时间戳(距离基准日期的天数)存储日期,需要通过xldate_as_datetime转换成标准日期对象。
  3. xlrd 可以写入 Excel 吗?
     
    不可以,xlrd 仅用于读取;写入 xls 用 xlwt,xlsx 用 openpyxl。
posted @ 2020-05-18 21:27  sjxm2017  阅读(204)  评论(0)    收藏  举报