R语言使用xlsx包读取网络xlsx文件运行报错问题求助
报错原因排查
- 第一个报错原因:
xlsx包的read.xlsx接口仅支持读取本地存储的Excel文件,无法直接解析HTTPS网络链接指向的远程文件,因此直接传入URL会提示文件不存在。 - 第二个报错原因:使用
download.file下载时没有指定二进制写入模式,Windows环境下默认以文本模式下载二进制的xlsx文件会导致文件损坏,下载得到的临时文件不是合法的Excel格式,因此解析时抛出格式不识别的错误;同时xlsx包依赖Java环境,环境配置不匹配也容易触发各类底层调用错误。
可行解决方案
方案1:修复原有代码逻辑
在download.file参数中添加mode = "wb"指定二进制写入模式,即可解决文件损坏问题:
library(xlsx) l <- "https://www.rbnz.govt.nz/-/media/ReserveBank/Files/Statistics/tables/b2/hb2-daily.xlsx" options(java.parameters = "-Xmx1000m") tmp <- tempfile(fileext = ".xlsx") # 增加mode="wb"参数指定二进制下载,避免文件损坏 download.file(l, destfile=tmp, method="curl", mode = "wb") rbnz.rates <- read.xlsx(file = tmp, sheetName = "Data", startRow = 5) unlink(tmp)
方案2:使用无Java依赖的包(更稳定,推荐)
换用不需要Java环境的openxlsx包读取,可彻底避免Java环境配置引发的各类问题:
# 首次使用需先安装包:install.packages("openxlsx") library(openxlsx) l <- "https://www.rbnz.govt.nz/-/media/ReserveBank/Files/Statistics/tables/b2/hb2-daily.xlsx" tmp <- tempfile(fileext = ".xlsx") download.file(l, destfile=tmp, mode = "wb") rbnz.rates <- read.xlsx(tmp, sheet = "Data", startRow = 5) unlink(tmp)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

