You need to enable JavaScript to run this app. 如何在R语言中按工作表名称含指定字符串规则批量导入Excel并合并为单个数据框
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中按工作表名称含指定字符串规则批量导入Excel并合并为单个数据框

实现方案

依赖准备

整个流程用到的核心功能来自readxl包(读取Excel内容、获取工作表列表),搭配purrr做批量循环处理、dplyr做数据框合并,提前加载对应包:

library(readxl)
library(purrr)
library(dplyr)
library(stringr) # 用于字符串匹配

可复用处理函数

函数支持自定义目标目录、工作表匹配特征字符串,内置异常跳过逻辑,避免单个文件异常导致整个流程中断:

batch_read_expense_audit <- function(target_dir, sheet_keyword = "Expense Audit") {
  # 1. 枚举目录下所有Excel文件(支持.xls/.xlsx格式)
  excel_files <- list.files(
    path = target_dir,
    pattern = "\\.(xlsx|xls)$",
    full.names = TRUE,
    recursive = FALSE # 如果需要遍历子目录改成TRUE即可
  )
  if (length(excel_files) == 0) stop("目标目录下未找到任何Excel文件")

  # 2. 逐个处理每个Excel文件
  processed_df <- map(excel_files, ~{
    # 获取当前文件所有工作表名称
    all_sheets <- excel_sheets(.x)
    # 筛选包含目标关键词的工作表
    matched_sheet <- all_sheets[str_detect(all_sheets, fixed(sheet_keyword))]

    # 异常判断:无匹配工作表时跳过并提示
    if (length(matched_sheet) == 0) {
      message(paste0("警告:文件 ", basename(.x), " 中未找到包含「", sheet_keyword, "」的工作表,已跳过"))
      return(NULL)
    }
    # 若存在多个匹配工作表,默认读取第一个匹配项
    if (length(matched_sheet) > 1) {
      message(paste0("提示:文件 ", basename(.x), " 存在多个匹配工作表,默认读取:", matched_sheet[1]))
      matched_sheet <- matched_sheet[1]
    }

    # 读取目标工作表,新增来源文件列方便溯源
    read_excel(.x, sheet = matched_sheet) %>%
      mutate(source_file = basename(.x))
  })

  # 3. 合并所有有效数据框
  final_df <- bind_rows(processed_df)
  return(final_df)
}

函数调用方式

直接传入Excel文件所在的目录路径即可,默认匹配包含"Expense Audit"的工作表:

# 替换成你自己的文件存放路径
all_expense_data <- batch_read_expense_audit(target_dir = "你的Excel文件存放目录")

常用调整说明

  • 若需要忽略大小写匹配(比如工作表名是小写的"expense audit"),可以把代码里的fixed(sheet_keyword)替换成regex(sheet_keyword, ignore_case = TRUE)
  • 如果需要递归遍历子文件夹下的Excel文件,把list.files里的recursive参数改成TRUE即可
  • 若不同来源的Excel表列名、列类型差异较大,可以在read_excel调用时补充col_types参数手动指定列类型,避免自动猜测导致的类型错误

内容的提问来源于stack exchange,提问作者Shlammed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 10:24:00