Phillip-Jan van Zyl
2019-Feb-06 12:10 UTC
[R] readxl::excel_sheets in tryCatch() doesn't catch error
Hi R programmers I am reading multiple .xls and .xlsx files from a directory using readxl from tidyverse. When reading fails, the code should continue on to the next file. However, when I call the custom function readExcelSheets (in a loop and with the tryCatch function) I get an error for some files and the code then stops executing. How can I force my code to continue on to the next files? Here is the function: readExcelSheets <- function(curPath) { out <- tryCatch( { message("This is the 'try' part") dat <- excel_sheets(curPath) }, error=function(cond) { message(paste("Error in opening Excel file with readxl read sheets:", curPath)) message("Here's the original error message:") message(cond) }, warning=function(cond) { message(paste("readxl caused a warning en reading sheets:", curPath)) message("Here's the original warning message:") message(cond) }, finally={ message(paste("Processed file for sheets:", curPath)) message("End of processing file for sheets.") } ) return(out) } The loop looks like this: listLength <- length(excelList) for (excel_file in excelList) { curPath <- excel_file sheetNames <- NULL sheetNames <- withTimeout({readExcelSheets(curPath)}, timeout = 5, onTimeout="silent") if(is.null(sheetNames)){next} for (sheetName in sheetNames){ # do something } } The problem is that I get an error: Error: Evaluation error: zip file '<the path to the file>' cannot be opened. And then execution of the loop stops without progressing to the next Excel file. Note that for the first n=+-20 files the code works as expected. I think that there may be an error in the full path name (such as a text encoding error), but my point is that it should exit silently and progress to the next Excel file even if the path is not found. Best regards Phillip [[alternative HTML version deleted]]