You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:10:47