如何用R按文件名前缀合并多个xlsx文件为对应多工作表xlsx文件
当然可以用R实现这个需求!
我来给你一步步拆解实现方法,用到几个专门处理Excel的R包,操作起来很顺畅:
第一步:安装并加载所需包
我们需要两个核心包:
readxl:用来读取Excel文件内容openxlsx:用来创建包含多个工作表的Excel文件
先安装(首次运行需要)并加载它们:
# 安装包(仅首次运行时需要) install.packages(c("readxl", "openxlsx")) # 加载包 library(readxl) library(openxlsx)
第二步:设定工作目录并获取文件列表
先把工作目录切换到你存放这些Excel文件的文件夹,或者直接在代码里指定路径:
# 替换成你的文件实际存放路径 setwd("你的Excel文件所在目录") # 获取目录下所有.xlsx格式的文件 file_list <- list.files(pattern = "\\.xlsx$")
第三步:按前缀分组文件
我们需要把文件名里的前缀(Russia、USA)提取出来,然后把同前缀的文件归为一组:
# 提取每个文件的前缀(比如从"Russia - GDP.xlsx"中得到"Russia") file_prefixes <- sub(" - .*\\.xlsx", "", file_list) # 按前缀对文件列表进行分组 grouped_files <- split(file_list, file_prefixes)
第四步:批量合并并保存结果
遍历每个分组,读取文件内容,然后写入到对应名称的Excel文件中,每个文件包含GDP和GNP两个工作表:
# 遍历每个前缀分组 for (prefix in names(grouped_files)) { # 创建一个新的Excel工作簿 wb <- createWorkbook() # 遍历当前分组里的每个文件 for (file in grouped_files[[prefix]]) { # 提取工作表名称(比如从"Russia - GDP.xlsx"中得到"GDP") sheet_name <- sub(".* - (.*)\\.xlsx", "\\1", file) # 读取当前Excel文件的数据 df <- read_excel(file) # 将数据添加为工作簿的一个工作表 addWorksheet(wb, sheet_name) writeData(wb, sheet_name, df) } # 保存工作簿为前缀命名的Excel文件(如果文件已存在会覆盖) saveWorkbook(wb, paste0(prefix, ".xlsx"), overwrite = TRUE) }
小提示
- 如果你的Excel文件包含特殊格式(比如公式、单元格样式),
openxlsx能保留大部分基础格式;如果需要更精准的格式兼容,可以试试xlsx包,但它依赖Java环境,配置相对麻烦。 - 运行前记得把
setwd里的路径改成你自己的文件路径,也可以用绝对路径替代,避免路径错误。
内容的提问来源于stack exchange,提问作者Natasha Rostov




