readxl::read_xls 返回“libxls 错误:无法打开文件”

Bru*_*x13 6 macos excel xls r readxl

我有多个 .xls (~100MB) 文件,我想从中将多个工作表(从每个工作表)作为数据帧加载到 R 中。我尝试了各种函数,例如xlsx::xlsx2and XLConnect::readWorksheetFromFile,它们总是运行很长时间(> 15 分钟)并且永远不会完成,我必须强制退出 RStudio 才能继续工作。

我也试过gdata::read.xls,它确实完成了,但每张纸需要超过 3 分钟,而且它不能像XLConnect::loadWorkbookcan一样一次提取多张纸(这对加快我的管道非常有帮助)。

执行这些函数所需的时间(我什至不确定如果让它们运行更长时间,前两个函数是否会完成)对于我的管道来说太长了,我需要同时处理许多文件。有没有办法让这些更快地完成/完成?

在几个地方,我看到了使用该功能的建议,该功能readxl::read_xls似乎被广泛推荐用于此任务,并且每张纸应该更快。然而,这个给了我一个错误:

> # Minimal reproducible example:
> setwd("/Users/USER/Desktop")
> library(readxl)
> data <- read_xls(path="test_file.xls")
Error: 
  filepath: /Users/USER/Desktop/test_file.xls
  libxls error: Unable to open file
Run Code Online (Sandbox Code Playgroud)

我还进行了一些基本测试,以确保文件存在且格式正确:

> # Testing existence & format of the file
> file.exists("test_file.xls")
[1] TRUE
> format_from_ext("test_file.xls")
[1] "xls"
> format_from_signature("test_file.xls")
[1] "xls"
Run Code Online (Sandbox Code Playgroud)

test_file.xls上面使用的是可在这里。在使第一个功能运行得更快或read_xls根本运行方面的任何建议将不胜感激- 谢谢!

更新:

这似乎有些用户能够打开上面使用的文件readxl::read_xls的功能,而其他人都没有,无论是在Mac和Windows,使用最先进的最新版本RRstudio以及readxl。该问题已发布在 readxl GitHub 上,尚未解决。

red*_*ark 5

我下载了您的数据集并以这种方式读取了每个 Excel 表(例如,对于“整体”和“区域”表):

install.packages("readxl")
library(readxl)
library(data.table)

dt_overall <- as.data.table(read_excel("test_file.xls", sheet = "Overall"))
area_sheet <- as.data.table(read_excel("test_file.xls", sheet = "Area"))
Run Code Online (Sandbox Code Playgroud)

最后,我得到这样的 dt(例如,只有“区域”表的数据集的一部分):

在此处输入图片说明

同样,您可以改用该read_xls函数read_excel

我检查了一下,它也可以正常工作,甚至更快一点,因为它read_excel是一个包装器read_xls和包中的read_xlsx功能readxl

此外,您可以使用包中的excel_sheets函数readxl来读取 Excel 文件的所有工作表。

更新

使用microbenchmarkpackage 对以下包/函数进行基准测试:gdata::read.xls,XLConnect::readWorksheetFromFilereadxl::read_excel.

XLConnect它是基于 Java 的解决方案,因此需要大量 RAM。

在此处输入图片说明

  • 尝试卸载“readxl”软件包,重新启动 RStudio 并重新安装“readxl”。另请尝试将 R 和 RStudio 更新到最新版本(如果您有过时的版本)。 (2认同)
  • 2. 尝试使用旧版本的 `readxl` 软件包打开您的 excel 文件(例如 v.1.3.0、1.2.0、1.1.0. 等;所有存档版本均可在此处获取:https://cran)。 r-project.org/src/contrib/Archive/readxl/)。您可以通过以下方式安装它(例如): `if(!require(readxl)) { install.packages("https://cran.r-project.org/src/contrib/Archive/readxl/readxl_1.2.0 .tar.gz", repos = NULL, type="source"); 抑制PackageStartupMessages(require(readxl))}` PS在链接中你可以指定任何版本的存档包 (2认同)