使用Openpyxl加载带条件格式的工作簿时出现类型错误
问题分析与解决方向
从你给出的报错信息来看,核心问题是openpyxl在解析工作表的条件格式规则时,错误地将包含单元格引用的字符串($G$16-0.015)当作纯浮点数处理,导致无法完成类型转换抛出错误。结合你提到的“移除条件格式后恢复正常、Pandas能正常加载”的情况,给你几个可行的解决方向:
1. 修复原文件中的条件格式规则
打开你的Excel文件,找到对应的条件格式设置:
- 排查是否有规则的“值”字段使用了类似
$G$16-0.015这种混合单元格引用和数值运算的写法,openpyxl的解析器无法识别这种非纯数值的格式值。 - 如果你是想基于
$G$16的值减去0.015来设置条件格式,应该将规则类型改为公式型规则,而不是直接在“值”中填写引用运算。这样openpyxl就能正确解析规则逻辑了。
2. 绕过条件格式加载工作簿
如果暂时不想修改原文件,可以通过openpyxl的加载参数跳过格式解析:
- 尝试用
read_only模式加载,这种模式会优先读取数据,跳过部分格式解析逻辑,避免触发条件格式的解析错误:wb = openpyxl.load_workbook("C:\\Users\\Desktop\\Dropbox\\Produção Equipes\\"+arquivo+".xlsx", read_only=True) - 另外,你也可以先用Pandas读取文件(已知能正常运行),再转换为openpyxl工作簿对象(适合仅处理数据的场景,会丢失部分格式):
import pandas as pd from openpyxl import Workbook from openpyxl.utils.dataframe import dataframe_to_rows # 用Pandas读取文件 df = pd.read_excel("C:\\Users\\Desktop\\Dropbox\\Produção Equipes\\"+arquivo+".xlsx") # 转换为openpyxl工作簿 wb = Workbook() ws = wb.active for row in dataframe_to_rows(df, index=False, header=True): ws.append(row)
3. 升级Python与openpyxl版本
你当前使用的Python3.6已经是停止维护的老旧版本,最新版的openpyxl可能已经不再对Python3.6提供完全兼容支持,这可能是导致解析bug的原因之一。建议:
- 升级Python到3.8及以上的稳定版本(比如3.9或3.10)
- 重新安装最新版的
openpyxl,再尝试加载文件,大概率能解决这类版本兼容导致的解析问题。
内容的提问来源于stack exchange,提问作者hugo.vm
相关产品推荐
相关产品推荐

