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

在R中将文件夹中所有Excel工作簿的工作表导入为独立数据集

批量导入指定文件夹内Excel所有工作表的R实现

以下是修改后的代码,可实现将指定文件夹内所有Excel工作簿的全部工作表导入为独立数据集,每个数据集以「工作簿名_工作表名」命名:

library(openxlsx)
library(tidyverse)

# 定义导入函数,参数为目标文件夹路径
import_all_excel_sheets <- function(folder_path) {
  # 获取文件夹内所有xlsx格式文件的完整路径
  files_list <- list.files(path = folder_path, pattern = "\\.xlsx$", full.names = TRUE)
  
  # 遍历每个Excel文件,读取所有工作表
  all_sheets <- map(files_list, function(file) {
    # 获取当前文件的所有工作表名称
    sheet_names <- getSheetNames(file)
    # 读取每个工作表,返回以工作表名为键的列表
    map(sheet_names, ~readWorkbook(file, sheet = .x)) %>% 
      set_names(sheet_names)
  }) %>% 
    # 外层以工作簿名(去掉后缀)为键
    set_names(str_remove(basename(files_list), "\\.xlsx$"))
  
  # 将嵌套列表展开为单层列表,并生成「工作簿名_工作表名」的命名
  flattened_list <- flatten(all_sheets)
  new_names <- map2(names(all_sheets), names(all_sheets[[1]]), ~paste0(.x, "_", .y)) %>% 
    flatten_chr()
  names(flattened_list) <- new_names
  
  # 将数据框导出到全局环境(注意:大量数据建议保留在列表中操作)
  list2env(flattened_list, env = .GlobalEnv)
  
  # 返回整理好的列表,方便后续处理
  return(flattened_list)
}

# 使用示例:替换为你的目标文件夹路径
import_all_excel_sheets("your/folder/path/here")

关键修改说明

  1. 遍历所有工作表:新增getSheetNames(file)获取当前工作簿的所有工作表名称,再通过内层map逐个读取,替代原代码中指定单个工作表的逻辑。
  2. 命名规则优化:通过str_remove(basename(files_list), "\\.xlsx$")提取不带后缀的工作簿名,再与工作表名拼接成最终数据集名称。
  3. 嵌套列表扁平化:将按工作簿分组的嵌套列表展开为单层列表,确保每个工作表对应独立的列表元素,再通过list2env导出到全局环境。

原代码作者提到的「建议保留列表结构而非导出到全局环境」依然适用——如果工作表数量较多,全局环境会变得杂乱,后续统一在列表中进行合并、筛选等操作会更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:03:17