read.xlsx не может найти файл Excel

Я хочу прочитать кучу файлов Excel, расположенных в одном каталоге, и сохранить их на разных листах в объединенном файле Excel.

Сначала я пытался использовать XLConnect, но продолжал получать ошибку GC overhead limit exceeded. Я наткнулся на этот вопрос, в котором говорится, что это обычная проблема с пакетами обработки Excel на основе Java, такими как XLConnect и xlsx. Я попробовал предложенный там трюк с управлением памятью, но он не сработал. Один из комментариев в одном из комментариев к принятым ответам предложил использовать openxls, поскольку он основан на RCpp, и, следовательно, избежать этой конкретной проблемы.

Мой текущий код выглядит следующим образом:

library(openxlsx)
mnth="January"
files <- list.files(path="./Original Files", pattern=mnth, full.names=T, recursive=FALSE)  #pattern match as multiple files are from the same month
# Read them into a list and write to sheet
wb <- createWorkbook()
lapply(files, function(x){
  print(x)
  xlFile<-read.xlsx(xlsxFile = x, sheet = 1, startRow = 2, colNames = T)  #Also tried
  str(xlFile)
  #Create a sheet in the new Excel file called Consolidated.xlsx with the month name
  #Append current data in sheet
})

Проблема, которую я получаю, это ошибка: Error in read.xlsx.default(xlsxFile = x, sheet = 1, startRow = 2, colNames = T) : openxlsx can not read .xls or .xlm files!

Я убедился, что переменная files содержит все интересующие файлы (например, январь 2015.xls, январь 2016.xls и т. д.). Я также убедился, что путь к файлу указан правильно и что файлы Excel действительно существуют.

Я оставил запись в Excel в виде скелетного кода, так как мне нужно сначала решить проблему с чтением файлов.

Если это поможет, вот попытка кода с XLConnect

library(XLConnect)

setwd("D:/something/something")
mnth="January"
files <- list.files(path="./Original Files", pattern=mnth, full.names=T, recursive=FALSE)
# Read them into a list
df.list = lapply(files, readWorksheetFromFile, sheet=1, startRow=2)
#combine them into a single data frame and write to disk:
df = do.call(rbind, df.list)
rm(df.list)
outputFileName<-"Consolidated.xlsx"
# Load workbook (create if not existing)
wb <- loadWorkbook(outputFileName, create = TRUE)
createSheet(wb, name = mnth)
writeWorksheet(wb,df,sheet = mnth)
#write.xlsx2(df, outputFileName, sheetName = mnth, col.names = T, row.names = F, append = TRUE)
saveWorkbook(wb)

rm(df)
gc()

person DotPi    schedule 12.12.2016    source источник
comment
Я очень смущен. Вы просматриваете файлы из files <- list.files(path="./Original Files", ...), но затем пытаетесь открыть эти имена файлов с помощью xlsxFile <- system.file(x, package = "openxlsx"). Функция system.file открывает файлы, включенные в дистрибутивы пакетов, что, похоже, не то, что вы пытаетесь сделать. Я думаю, что вы просто используете плохой путь.   -  person MrFlick    schedule 12.12.2016
comment
Я также пытался использовать xlFile<-read.xlsx(xlsxFile = x, sheet = 1, startRow = 2, colNames = T) . Я обновлю вопрос с ошибкой, которую я получил с этим.   -  person DotPi    schedule 12.12.2016
comment
Новое сообщение об ошибке кажется довольно ясным. Пакет openxlsx не может читать файлы xls старого стиля; он читает только xlsx файлов.   -  person MrFlick    schedule 12.12.2016
comment
Спасибо! Можете ли вы добавить это в качестве ответа? Я просто предположил, что поскольку пакет xlsx читает оба, то и openxlsx тоже.   -  person DotPi    schedule 12.12.2016