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")
我正在尝试使用 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")