我正在尝试使用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循环内的代码会返回以下错误:
Error: InvalidFormatException (Java):
Your InputStream was neither an OLE2 stream, nor an OOXML stream
我做错了什么?
答案 0 :(得分:0)
问题与我的代码无关。
我在Excel中打开了该文件夹中的一些文件。在Excel中打开文件时,Excel会创建一个名为&#34;〜$ filename.xlsx&#34;的不可见文件。由于我的正则表达式搜索带有后缀&#34; .xlsx&#34;的文件,因此也找到了这些文件,并且由于这些文件不是电子表格文件,因此XLConnect无法读取它们并引发错误。 / p>
我通过在Excel中关闭这些文件来解决问题。
另一种解决方案是在正则表达式中排除以波浪号开头的文件,例如:
list.files(path, pattern = "^[^~].+\\.xlsx")