使用VS Code+Python3.11读取Excel报错:'ReadOnlyWorksheet'无'defined_names'属性
依赖库版本不兼容:这是最核心的原因。两个环境里的
pandas或它依赖的Excel读取引擎(比如openpyxl、xlrd)版本存在差异。比如VSCode的Python3.11环境中,新版openpyxl修改了ReadOnlyWorksheet类的结构,删掉了defined_names属性;而Anaconda环境用的是旧版openpyxl,这个属性还存在,所以不会报错。环境依赖冲突:VSCode的Python3.11环境可能存在库版本冲突,比如
pandas和openpyxl版本不匹配。有些新版pandas读取Excel的调用逻辑发生了变化,但环境里的openpyxl未适配这个变化,就会出现访问不存在属性的错误。读取引擎差异:
pd.read_excel会根据文件类型自动选择读取引擎,不同环境的默认引擎可能不同。比如Anaconda环境可能默认用xlrd读取.xls文件,而VSCode环境用openpyxl读取.xlsx文件,两者的工作表对象结构不一样,也会引发错误。
统一依赖版本:先在Anaconda环境里执行
pip list,记下pandas、openpyxl(或xlrd)的版本号,然后在VSCode的Python3.11环境里用pip install pandas==x.x.x openpyxl==y.y.y安装完全相同的版本。显式指定读取引擎:调用
pd.read_excel时加上引擎参数,比如针对.xlsx文件用part=pd.read_excel(path,sheet_name = mto_sheet, engine='openpyxl'),针对.xls文件用engine='xlrd',确保两个环境使用一致的读取逻辑。检查文件状态:确认Excel文件没被其他程序(比如Excel客户端)锁定,锁定状态会触发只读模式读取,可能导致工作表对象属性异常。
内容的提问来源于stack exchange,提问作者Panda

