使用lapply调用openxlsx::read.xlsx报错invalid 'description' argument
错误原因
- 核心问题是
lapply的参数逻辑完全颠倒:lapply第一个参数是需要迭代遍历的对象,你当前传入的是固定字符串"Table",相当于仅执行1次调用,直接把包含多个文件路径的filenames向量整体传给read.xlsx的xlsxFile参数,而read.xlsx的xlsxFile参数单次仅支持接收单个文件路径,因此触发参数无效报错。 - 你之前代码能正常运行的唯一可能是:当时目标文件夹下仅有1个xlsx文件,
filenames长度为1,刚好符合read.xlsx的参数要求;现在文件夹内xlsx文件数大于1,报错就会触发。 - 其他可能触发该报错的场景:目标路径下新增了Excel打开时生成的
~$开头的临时xlsx文件(会被*.xlsx规则匹配到,属于无效文件)、某个xlsx文件正被你或其他同事打开占用。
修复后的代码
library(openxlsx) # 统一设置根路径,避免重复填写出错 root_path <- "S:\\YJB\\Shared\\corpdata\\Community Division\\Team\\Divisional BAU\\21. Serious Incidents from June 2021\\Serious Incidents Notification Forms\\All_Data" # 匹配xlsx文件,同时过滤掉无效的Excel临时文件,full.names参数直接生成完整路径,无需手动拼接 filenames <- dir(root_path, pattern = "^[^~].*\\.xlsx$", full.names = TRUE) # 遍历所有文件路径,读取每个文件的Table工作表,加异常捕获避免单个文件读取失败导致整个任务崩溃 SheetList <- lapply(filenames, function(x) { tryCatch({ read.xlsx(xlsxFile = x, sheet = "Table") }, error = function(e) { message(paste("读取文件失败:", x, "错误信息:", e$message)) return(NULL) }) }) # 可选操作:过滤掉读取失败返回的NULL元素 SheetList <- Filter(Negate(is.null), SheetList)
内容的提问来源于stack exchange,提问作者Nick Read
相关产品推荐
相关产品推荐

