如何在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
相关产品推荐
相关产品推荐

