如何让R脚本跳过不含'Project Summary'工作表的Excel文件?
解决R语言readxl批量读取Excel时跳过无指定工作表文件的问题
你可以通过两种方式修改脚本,实现自动跳过不含"Project Summary"工作表的Excel文件:
方法一:用tryCatch捕获错误(容错式读取)
直接在读取时捕获错误,遇到找不到工作表的情况就跳过该文件:
library(readxl) # 设置目标文件夹路径 setwd(file.path(dirname("~"), "/Shared Documents/Programs/Data and Reporting/Data Quality Reports/Org Level Data")) # 获取文件夹下所有xlsx格式文件 lst <- list.files(pattern = "*.xlsx") # 初始化空数据框用于存储合并结果 df <- data.frame() # 循环处理每个文件 for (table in lst) { # 尝试读取指定工作表,出错时返回NULL并打印提示 dataFromExcel <- tryCatch( read_excel(table, sheet = "Project Summary"), error = function(e) { message(paste("跳过文件:", table, ",原因:", e$message)) return(NULL) } ) # 仅当读取成功时,将数据合并到总数据框 if (!is.null(dataFromExcel)) { df <- rbind(df, dataFromExcel) } } # 导出合并后的数据为CSV(row.names=FALSE避免生成多余行号) write.csv(df, "_Project Level data.csv", row.names = FALSE)
方法二:先检查工作表再读取(主动式判断)
先获取每个Excel文件的工作表列表,确认存在目标工作表后再读取:
library(readxl) # 设置目标文件夹路径 setwd(file.path(dirname("~"), "/Shared Documents/Programs/Data and Reporting/Data Quality Reports/Org Level Data")) # 获取文件夹下所有xlsx格式文件 lst <- list.files(pattern = "*.xlsx") # 初始化空数据框用于存储合并结果 df <- data.frame() # 循环处理每个文件 for (table in lst) { # 获取当前Excel文件的所有工作表名称 sheet_names <- excel_sheets(table) # 检查是否存在"Project Summary"工作表 if ("Project Summary" %in% sheet_names) { dataFromExcel <- read_excel(table, sheet = "Project Summary") df <- rbind(df, dataFromExcel) } else { message(paste("跳过文件:", table, ",无'Project Summary'工作表")) } } # 导出合并后的数据为CSV write.csv(df, "_Project Level data.csv", row.names = FALSE)
两种方法说明
- 方法一适合不确定出错原因的场景,除了找不到工作表,其他读取错误(比如文件损坏)也会自动跳过;
- 方法二更高效,提前过滤不符合条件的文件,不会触发读取错误。
内容的提问来源于stack exchange,提问作者AdorableRaspberry953
相关产品推荐
相关产品推荐

