R语言使用read_xls读取xls文件时报libxls错误如何解决?
解决方案
核心问题为Windows系统默认download.file使用文本模式下载二进制文件,导致xls文件结构损坏无法被libxls识别,可按以下步骤修复:
- 第一步:修改下载代码,添加
mode = "wb"参数指定二进制下载模式,90%以上的同类问题可通过该操作解决,修改后的下载代码为:download.file(url = url, destfile = temp, mode = "wb") - 若修改后仍报错,可依次尝试以下操作:
- 更换下载工具:使用
httr包的GET方法下载,避免系统默认下载工具的兼容问题,示例代码:
library(httr) GET(url, write_disk(temp, overwrite = TRUE))- 适配文件格式:部分机构会将xlsx格式文件重命名为xls后缀,可尝试用
read_xlsx(temp, sheet = 1)读取,或使用openxlsx、readODS等其他读取包测试。 - 规避路径问题:你的临时文件路径中存在空格(用户名Jon Doe),可指定无空格的本地路径存储文件,测试是否为路径识别异常导致的报错。
- 更换下载工具:使用
修改后可直接在Windows运行的完整代码
rm(list = ls(all = TRUE)) #加载运行代码所需的依赖包 library(dplyr) library(tidyverse) library(readxl) library(stringr) library(taRifx) library(lubridate) #设置xls文件的URL链接 url <- "https://files.hawaii.gov/dbedt/economic/data_reports/DLIR/LFR_LAUS_LF.xls" #创建临时文件存储下载的xls文件,指定二进制模式适配Windows系统 temp <- tempfile(fileext = "xls") download.file(url = url, destfile = temp, mode = "wb") #定义函数筛选所需列:日期(第2列)、劳动力(第3列)、就业人数(第4列)、失业率(第6列) keep_cols <- function(data) { data <- data %>% select(2,3,4,6) %>% rename(date = 1, lf = 2, empl = 3, ur = 4) return(data) } #将xls工作表导入R环境 state_xls <- read_xls(temp, sheet = 1) %>% keep_cols() %>% mutate(geo = "HI")
内容的提问来源于stack exchange,提问作者OGC
相关产品推荐
相关产品推荐

