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