You need to enable JavaScript to run this app. 如何使用Python借助xlrd库从Excel循环读取多列数据
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python借助xlrd库从Excel循环读取多列数据

基于xlrd批量读取多列Excel数据的调整方案

原代码的核心问题

  • 列索引硬编码:循环读取行时,单元格列位置固定写死为3,没有遍历多列的逻辑,因此只会固定输出指定单列的内容
  • 未提取单元格实际值:直接将sheet.cell(...)返回的xlrd Cell对象存入列表,而非单元格的实际文本/数值,后续计算、导出都会出现异常
  • 格式小问题:workbook行存在多余缩进,会触发语法报错

调整逻辑说明

xlrd的行、列索引均从0开始计数,要实现多列批量读取,核心是先定义需要读取的目标列索引集合,再在行循环中遍历这些目标列收集对应单元格的值,不需要修改整体的行循环结构,只要把固定列值替换为列列表的遍历即可。

可直接复用的实现代码

方案1:按行存储多列数据(适合数据分析场景,最常用)

最终存储的结构为二维列表:每一行对应一个子列表,子列表内按顺序存放该行所有目标列的实际值

import xlrd
file_location = "dec_DB.xlsx"

workbook = xlrd.open_workbook(file_location)
sheet = workbook.sheet_by_name('Sheet1')

# 配置需要读取的目标列索引,可根据实际需求增删
# 以下示例为读取索引为2、3、4的三列(对应日常计数的C/D/E列)
target_col_list = [2, 3, 4]
multi_col_data = []

for rownum in range(sheet.nrows):
    # 遍历当前行下的所有目标列,收集实际单元格值
    row_values = [sheet.cell(rownum, col_idx).value for col_idx in target_col_list]
    multi_col_data.append(row_values)
  • 如果需要读取连续区间的列,比如从第2列到第6列,不需要手动枚举索引,直接生成连续列表即可:target_col_list = list(range(2, 7))
  • 最终读取完成后,可直接通过multi_col_data[row_index][col_index]定位对应单元格的数值

方案2:按列独立存储数据(适合单列批量处理的场景)

最终存储结构为字典,每个目标列对应一个独立的一维列表,方便单独调取某一列的全部值

import xlrd
file_location = "dec_DB.xlsx"

workbook = xlrd.open_workbook(file_location)
sheet = workbook.sheet_by_name('Sheet1')

target_col_list = [2, 3, 4]
# 为每个目标列初始化独立的存储列表
col_storage = {col_idx: [] for col_idx in target_col_list}

for rownum in range(sheet.nrows):
    for col_idx in target_col_list:
        col_storage[col_idx].append(sheet.cell(rownum, col_idx).value)

# 取值示例:提取索引为2的列的全部值,直接调用 col_storage[2] 即可

进阶优化:通过列名匹配读取,无需硬记列索引

如果Excel的列位置可能发生变动,可以先读取表头行建立列名和列索引的映射关系,直接通过列名指定要读取的列,避免手动找列索引:

# 假设第0行为表头行
header_row_idx = 0
# 建立列名到列索引的映射字典
col_name_index_map = {}
for col_idx in range(sheet.ncols):
    col_name = sheet.cell(header_row_idx, col_idx).value
    col_name_index_map[col_name] = col_idx

# 后续直接通过列名指定需要读取的列即可,比如要读取“姓名”“年龄”两列
target_col_names = ["姓名", "年龄"]
target_col_list = [col_name_index_map[col_name] for col_name in target_col_names]

常见踩坑提醒

  • 若使用xlrd 2.0及以上版本读取xlsx文件时触发xlsx file not supported报错,可选择降级到1.2.0版本,或更换为openpyxl、pandas库实现文件读取
  • 读取时注意调整跳过空行、表头行的逻辑,可根据实际数据结构按需裁剪,不需要强行读取全部162行的原始内容

内容的提问来源于stack exchange,提问作者atheer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 04:45:03