使用openpyxl操作xlsx文件时遭遇UnicodeDecodeError问题求助
解决读取XLSX文件时的UnicodeDecodeError问题
首先你要明确:当前代码存在基础错误——load_workbook返回的是Workbook对象,不能直接用['A']这种方式读取列,必须先获取对应的Worksheet(工作表)对象,这很可能是引发错误的核心原因。
修正核心代码
先把读取工作表的逻辑改正确:
from openpyxl import load_workbook def Volunteer_list_show(): # 加载工作簿 volunteer_workbook = load_workbook('Volunteer_list.xlsx') # 获取工作表:可以取活跃工作表,或指定具体表名如volunteer_workbook['志愿者名单'] volunteer_sheet = volunteer_workbook.active # 现在正常读取列 surnames = volunteer_sheet['A'] names = volunteer_sheet['B'] # ... identificator = volunteer_sheet['K'] # 遍历列中单元格的示例 for cell in surnames: print(cell.value)
针对编码错误的额外处理
你之前尝试的编码检测函数完全不适用当前场景:该函数是处理字节流文件的,但load_workbook已经完成了XLSX文件的解析(XLSX本质是压缩XML格式,openpyxl会自动处理内部编码),你传入的volunteer_list是Workbook对象,调用decode()本身就是错误操作,因此无效。
如果修正工作表读取逻辑后仍有编码问题,可尝试以下方案:
- 使用只读模式加载:对大文件或编码特殊的文件,只读模式兼容性更强
volunteer_workbook = load_workbook('Volunteer_list.xlsx', read_only=True) - 检查文件完整性:重新保存XLSX文件,选择"另存为"并确保保存为标准
.xlsx格式,避免使用旧版.xls格式 - 借助pandas读取:pandas的ExcelReader对编码兼容性更好
import pandas as pd df = pd.read_excel('Volunteer_list.xlsx') # 获取对应列数据:iloc[:,n]中n为列索引,0对应原A列,1对应原B列 surnames = df.iloc[:, 0] names = df.iloc[:, 1]
内容的提问来源于stack exchange,提问作者alexwhiterock
相关产品推荐
相关产品推荐

