XLConnect readworksheetfromfile上的R或下一个循环

XLConnect readworksheetfromfile上的R或下一个循环,r,loops,xlconnect,R,Loops,Xlconnect,请有人解释一下我如何根据excel工作表是否存在于多个文件中在xlconnect上执行循环。我已经看过了 但是我不能为我正在努力做的事情去做。 示例:如果我有5个excel文件,其中一些文件包含sheet1,另一些文件包含sheet1和sheet2,我如何判断该文件是否包含sheet2,然后读取工作表,否则跳到下一个文件 filenames<-list.files(location,pattern='xlsx',full.names = TRUE)#this gives the file

请有人解释一下我如何根据excel工作表是否存在于多个文件中在xlconnect上执行循环。我已经看过了 但是我不能为我正在努力做的事情去做。 示例:如果我有5个excel文件,其中一些文件包含sheet1,另一些文件包含sheet1和sheet2,我如何判断该文件是否包含sheet2,然后读取工作表,否则跳到下一个文件

filenames<-list.files(location,pattern='xlsx',full.names = TRUE)#this gives the file path of all files
data = lapply(filenames, function(f) {
  wb = loadWorkbook(f)
  existsSheet(filenames, "sheet2") 
})# this thows an error because it can't find the sheet from file
for (file in filenames) {
  newFile = readWorksheetFromFile(file=file, sheet="sheet2")
  df = merge(newFile, newFile, all=TRUE)
}

应该是
existsSheet(wb,“sheet2”)
吗?谢谢,应该是
existsSheet(wb,“sheet2”)
,但我仍然不确定如何将这些文件读入1个数据帧。我正在尝试以下操作,但if语句不起作用
newdf=if(data=lappy(文件名,函数(f){wb=loadWorkbook(f)existsSheet(wb,“sheet2”)}=TRUE){list.files(location,pattern=“xlsx”)}这将给出sheet2 df.list=lappy(newdf,函数(i){readWorksheetFromFile(paste0(folder,i),sheet2”)}的文件列表#这将读取所有工作表sheet2
data
是一个逻辑向量,因此
filenames[data]
将是带有“sheet2”的文件名向量。所以
wbList很抱歉,应该是这样,但仍然不起作用,这让我觉得我需要一个for循环
Data=lappy(文件名,函数(f){wb=loadWorkbook(f)if(existsSheet(wb,“sheet2”)==TRUE)(list.files(location,pattern=“xlsx”)}
这仍然会拉出所有文件名,而不仅仅是sheet2Thank你这工作得很好:)