如何从多个DataFrame列表导出同名DataFrame至独立Excel文档
解决方法
我们可以用openxlsx包高效实现这个需求,它支持创建多工作表的Excel文件且无需Java依赖。以下是具体步骤和代码:
1. 安装并加载依赖包
install.packages("openxlsx") library(openxlsx)
2. 核心实现代码
假设你的LIST_DF是按COMPANY_NAME拆分后的列表,每个元素是对应公司的DataFrame集合(包含同名的DF1、DF2等),元素名称为公司名(比如"Company1"、"Company2"):
# 提取所有唯一的DataFrame名称(如DF1、DF2) df_names <- unique(unlist(lapply(LIST_DF, names))) # 遍历每个同名DataFrame组,生成对应Excel文件 lapply(df_names, function(df_name) { # 创建新工作簿 wb <- createWorkbook() # 遍历每个公司,将对应DF写入工作表 lapply(names(LIST_DF), function(company_name) { addWorksheet(wb, sheetName = company_name) writeData(wb, sheet = company_name, x = LIST_DF[[company_name]][[df_name]]) }) # 保存Excel文件,文件名以DF名称命名 saveWorkbook(wb, file = paste0(df_name, ".xlsx"), overwrite = TRUE) })
代码说明
df_names:获取所有需要处理的同名DF组的名称,确保不遗漏任何一组。- 外层
lapply:针对每个DF组(如DF1)创建独立的Excel文件。 - 内层
lapply:将每个公司的该DF写入Excel的对应工作表,直接用公司名作为工作表名称,避免序号匹配错误。 saveWorkbook:将生成的工作簿保存为以DF名称命名的文件,overwrite = TRUE允许覆盖已存在的同名称文件。
替代方案(用for循环实现)
如果你更习惯for循环,也可以写成以下形式:
df_names <- unique(unlist(lapply(LIST_DF, names))) for (df_name in df_names) { wb <- createWorkbook() for (company_name in names(LIST_DF)) { addWorksheet(wb, sheetName = company_name) writeData(wb, sheet = company_name, x = LIST_DF[[company_name]][[df_name]]) } saveWorkbook(wb, paste0(df_name, ".xlsx"), overwrite = TRUE) }
内容的提问来源于stack exchange,提问作者CuRious Coder
相关产品推荐
相关产品推荐

