You need to enable JavaScript to run this app. Python新手使用xlrd读取xlsx文件报错,寻求解决方案
优惠活动
大模型
产品
解决方案
定价
更多

Python新手使用xlrd读取xlsx文件报错,寻求解决方案

问题原因

你安装的xlrd为2.0及以上版本,该版本起官方移除了对.xlsx格式文件的支持,仅支持旧版.xls格式文件,因此打开xlsx文件时触发该报错。

解决方案

方案1:降级xlrd版本

直接执行命令安装支持xlsx的旧版xlrd即可:
pip install xlrd==1.2.0

方案2:替换为适配xlsx的openpyxl库(更推荐)

openpyxl是当前官方推荐的读写.xlsx文件的库,兼容所有xlsx格式特性,执行命令安装:
pip install openpyxl

代码其他问题修正

你现有代码还存在多处逻辑和语法错误,即使解决了xlrd的报错也无法正常运行,修正点如下:

  • 多余导入from xlrd import sheet,你已经实例化了worksheet对象,读取单元格应该使用worksheet.cell()而非sheet.cell()
  • 循环逻辑错误:当前判断第一行第i列单元格为空就直接退出,会直接漏掉所有非空列的数据
  • 插入到C文件的内容为固定字符串,没有实际代入读取到的Xi、Yi值
  • 重复读写C文件效率极低,应该读取一次文件后插入所有内容再一次性写入
修正后完整代码(基于xlrd 1.2.0版本)
import xlrd
import os.path

# 读取Excel文件
workbook = xlrd.open_workbook(os.path.join('C:\\Users\\mushtay\\Desktop', 'RDMControls_XCP.xlsx'))
worksheet = workbook.sheet_by_name('ShaftSpeed_SWC')

insert_contents = []
i = 1
# 遍历列,直到遇到空单元格停止
while i < worksheet.ncols:
    cell_val = worksheet.cell(0, i).value
    if not cell_val:  # 单元格为空就停止遍历
        break
    # 读取两个目标单元格的值
    Xi = worksheet.cell_value(0, i)
    Yi = worksheet.cell_value(8, i)
    # 拼接要插入的内容
    insert_contents.append(f"{Xi}-{Yi}\n")
    i += 1

# 一次性读写C文件
with open("C:\\Users\\mushtay\\Desktop\\Cal0_ROMVariables.c", "r", encoding="utf-8") as f:
    contents = f.readlines()

# 倒序插入保证内容顺序和Excel列顺序一致
for line in reversed(insert_contents):
    contents.insert(17, line)

with open("C:\\Users\\mushtay\\Desktop\\Cal0_ROMVariables.c", "w", encoding="utf-8") as f:
    f.writelines(contents)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:15:05