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
相关产品推荐
相关产品推荐

