You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:19:53