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

R语言批量导入含多工作表的.xlsx文件生成嵌套列表问题

问题原因

read_xlsx()函数默认参数sheet = 1,仅会读取单个Excel文件的第一个工作表,因此你原来的代码生成的是仅包含6个文件首个工作表的单层列表。

实现代码

使用嵌套遍历即可实现「外层列表对应Excel文件、内层列表对应文件内工作表」的嵌套结构,你需要用到readxl包提供的excel_sheets()函数获取单个文件的所有工作表名:

library(readxl)

path_ <- "~/Desktop/my_folder/"
file.list <- list.files(path = path_, pattern = "\\.xlsx$", full.names = TRUE)

# 嵌套lapply:外层遍历文件,内层遍历同文件的所有工作表
df.list <- lapply(file.list, function(x) {
  # 获取当前文件的所有工作表名
  sheets <- excel_sheets(x)
  # 读取当前文件的所有工作表,生成本次内层列表
  lapply(sheets, function(s) read_xlsx(path = x, sheet = s))
})

结果验证

运行以下代码可以检查列表结构是否符合要求:

str(df.list, max.level = 2)

输出结果会显示第一层有6个元素(对应6个Excel文件),每个元素下包含5个子元素(对应单文件内的5个工作表),完全匹配你需要的[[文件序号]][[工作表序号]]调用格式。

可选优化(按需使用)

如果需要更直观的调用方式,可以给两层列表加上名称,直接通过文件名、工作表名调取数据:

# 外层列表命名为文件名,内层列表命名为工作表名
df.list_named <- setNames(df.list, basename(file.list)) |>
  lapply(function(file_data) setNames(file_data, excel_sheets(file.list[[match(file_data, df.list)]])))

# 调用示例:调取第一个xlsx文件的第一个工作表数据
df.list_named[[1]][[1]]
# 或按名称调取
df.list_named[["某文件.xlsx"]][["某工作表名"]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:24:07