如何将嵌套列表导出至同一个Excel文件的多个工作表?
嵌套列表数据集导出至同一Excel工作簿多工作表解决方案
原代码存在的问题
- 未初始化Excel工作簿对象
wb,后续操作无载体 - 过滤条件
filter(i == pz)逻辑错误,应改为filter(pz == i) - 列表索引调用顺序颠倒:原列表结构为
top_20[[pz值]][[scenario值]],但后续写成top_20[[j]][[i]]会引发报错 - 使用
as_Workbook方法错误,正确流程是先添加工作表再写入数据 - 缺少最终保存工作簿的步骤
修正后的完整代码
首先确保安装并加载openxlsx包:
# 首次运行需安装包 install.packages("openxlsx") # 加载包 library(openxlsx)
执行数据处理与导出逻辑:
pzs <- c(1, 2, 3, 4, 5) scenarios <- c("Scenario 1","Scenario 2","Scenario 3","Scenario 4","Scenario 5","Scenario 6") # 初始化空工作簿 wb <- createWorkbook() # 提前初始化嵌套列表,避免索引匹配警告 top_20 <- vector("list", length(pzs)) names(top_20) <- pzs for(i in pzs){ top_20[[as.character(i)]] <- vector("list", length(scenarios)) names(top_20[[as.character(i)]]) <- scenarios } # 嵌套循环处理数据并写入Excel for(j in scenarios){ for(i in pzs){ # 修正过滤条件,生成目标数据集 top_20[[as.character(i)]][[j]] <- data %>% filter(scenario == j) %>% filter(pz == i) %>% arrange(desc(Sales)) %>% head(n=10) # 定义工作表名称 sheet_name <- paste0("run_", i, "_", j) # 添加新工作表 addWorksheet(wb, sheetName = sheet_name) # 将数据集写入对应工作表 writeData(wb, sheet = sheet_name, x = top_20[[as.character(i)]][[j]]) } } # 保存工作簿到本地(可自定义路径) saveWorkbook(wb, file = "top_20_data.xlsx", overwrite = TRUE)
关键说明
- 用
createWorkbook()初始化空工作簿,作为所有工作表的载体 - 提前初始化嵌套列表并命名,避免循环中索引匹配的警告
- 每个循环内先调用
addWorksheet()创建工作表,再用writeData()写入对应数据集 - 最后通过
saveWorkbook()保存文件,overwrite = TRUE允许覆盖已存在的同名文件
内容的提问来源于stack exchange,提问作者L-dan
相关产品推荐
相关产品推荐

