Reading Excel files with XLConnect returns "Error: InvalidFormatException (Java): Your InputStream was neither an OLE2 stream, nor an OOXML stream"

Reading Excel files with XLConnect returns "Error: InvalidFormatException (Java): Your InputStream was neither an OLE2 stream, nor an OOXML stream"

我正在尝试使用 XLConnect 将 Excel 个文件的内容读入 R。这是我的代码的简化版本:

# point to a folder
path <- "/path/to/folder"

# get all the Excel files in that folder
files <- list.files(path, pattern = "*.xlsx")

# create an empty data frame
dat <- data.frame(var.1 = character(), var.2 = numeric())

# load XLConnect
library("XLConnect")

# loop over the files
for (i in seq_along(files)) {
    # read each Excel file
    wb <- loadWorkbook(paste(pfad, files[i], sep = "/"))
    # fill the data frame with data from the Excel file
    dat[i, 1:2] <- readWorksheet(wb, "Table1", startRow = 1, startCol = 1, endRow = 2, endCol = 1, header = FALSE)
    rm(wb)
}

当我用 loadWorkbook(paste(pfad, files[1], sep = "/")) 指定它时,我可以读取单个文件,但是当我用 files[i] 循环遍历文件列表时,for 循环中的代码 returns以下错误:

Error: InvalidFormatException (Java):
    Your InputStream was neither an OLE2 stream, nor an OOXML stream

我做错了什么?

问题与我的代码无关。

我在 Excel 中打开了该文件夹中的一些文件。当您在 Excel 中打开文件时,Excel 会创建一个名为“~$filename.xlsx”的不可见文件。由于我的正则表达式搜索后缀为“.xlsx”的文件,因此也找到了这些文件,并且由于这些文件不是电子表格文件,XLConnect 无法读取它们并抛出错误。

我通过关闭 Excel 中的那些文件解决了问题。

另一种解决方案是在正则表达式中排除以波浪号开头的文件,例如:

list.files(path, pattern = "^[^~].+\.xlsx")