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

R语言下载网站xlsx文件后用readxl导入报错-103如何解决

错误原因
  • 核心原因是你下载的xlsx文件实际已损坏或并非合法的xlsx格式文件。xlsx本质是zip压缩包,readxl读取时会先尝试解压归档,报错error -103 with zipfile in unzGetCurrentFileInfo就是解压时识别不到合法的zip文件结构导致的。
  • 最常见的触发场景:download.file在处理HTTPS协议的资源时,默认未使用二进制下载模式(尤其Windows系统),导致二进制的xlsx文件被破坏;部分站点会对无请求头的默认下载请求拦截,返回的是HTML错误页面而非真实xlsx文件,你仅修改了后缀名存储,实际文件并非xlsx格式。
  • 少数情况为readxl版本过旧,对部分特殊编码的xlsx文件兼容性不足。
解决方案

方法1:调整download.file参数(最便捷)

下载二进制文件时强制指定二进制模式mode = "wb",HTTPS资源指定method = "libcurl",避免文件损坏:

download.file(output$FULL_FINAL_PATH, destfile = "myfile.xlsx", method = "libcurl", mode = "wb")

下载完成后优先校验文件大小,和手动从浏览器下载的目标文件大小对比,确认一致后再读取。

方法2:使用httr包下载(兼容性更强)

httr包会自动处理请求头、HTTPS校验,更适合爬取站点资源:

library(httr)
GET(output$FULL_FINAL_PATH, write_disk("myfile.xlsx", overwrite = TRUE))

方法3:验证文件合法性后再读取

如果仍报错,可先确认下载的文件是否为真实xlsx:

# 读取文件前4个字节,合法xlsx为PK开头(对应十六进制50 4b 03 04)
head(readBin("myfile.xlsx", "raw", n=4))
# 如果输出不是 50 4b 03 04,说明文件不是xlsx,需要重新检查下载链接和请求逻辑

如果确认是readxl兼容性问题,可升级readxl版本,或换用openxlsx包读取:

install.packages("openxlsx")
library(openxlsx)
my_data <- read.xlsx("myfile.xlsx", sheet = 1, startRow = 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:05