You need to enable JavaScript to run this app. 从zip压缩包解压的xls文件读取时报libxls无法打开错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

从zip压缩包解压的xls文件读取时报libxls无法打开错误如何解决

问题原因

你遇到的libxls error: Unable to open file报错,是因为readxl依赖的底层解析库libxls仅支持二进制格式的Excel 97-2003(.xls)文件。你下载的该IBGE公开的.xls文件实际为XML Spreadsheet 2003格式,属于类XML的文本类xls格式,虽然文件签名识别结果为xls,但libxls无法解析该类格式。

可行解决方案

方案1:使用openxlsx2包读取(无需额外环境依赖,推荐)

openxlsx2对XML Spreadsheet格式的xls文件有良好支持,替换读取部分的代码即可:

# 安装依赖包(首次运行执行)
if(!require(openxlsx2)){ install.packages("openxlsx2") }

# 读取文件
file <- openxlsx2::read_xlsx(
  file = paste0(temp_,"/Tab_Compl_CNT_1T21.xls"),
  sheet = "Base Móvel",
  skip = 3
)

方案2:使用rio包自动适配读取引擎

rio包会自动根据文件格式匹配最优的读取引擎,无需手动判断文件类型:

# 安装依赖包(首次运行执行)
if(!require(rio)){ install.packages("rio") }

# 读取文件
file <- rio::import(
  file = paste0(temp_,"/Tab_Compl_CNT_1T21.xls"),
  sheet = "Base Móvel",
  skip = 3
)

方案3:使用XLConnect包读取(需本地配置Java环境)

如果本地已配置Java运行环境,XLConnect对各类非标准Excel格式的兼容性更高:

# 安装依赖包(首次运行执行)
if(!require(XLConnect)){ install.packages("XLConnect") }

# 读取文件
wb <- XLConnect::loadWorkbook(paste0(temp_,"/Tab_Compl_CNT_1T21.xls"))
file <- XLConnect::readWorksheet(wb, sheet = "Base Móvel", startRow = 4)

如果执行上述方案后仍读取失败,可先删除本地缓存的压缩包和解压文件,重新执行下载、解压流程,排除文件下载损坏的影响。

内容的提问来源于stack exchange,提问作者yuri_passuelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 13:36:05