write.xlsx可以将多个选项卡写入文件吗?

时间:2019-08-09 13:55:47

标签: r openxlsx writexl

在R中,我尝试使用openxlsx将一系列数据帧打印到Excel文件中。特别是在这种情况下,我使用的是list.files,read.xlsxwrite.xlsx

我仍然无法将多个标签写到一个Excel文件中。

请在下面查看我的代码,我尝试使用for循环和手动解决方案来解决此问题,以测试可行性,但是没有运气

这是我的代码当前的样子。对于文件列表的长度,将每个文件通过管道传递到读取函数,然后写入结果。

lapply(
  1:length(file.list), 
  function(x) {
      write.xlsx(
        read.xlsx(file.list[i]), 
        file = file_name, 
        sheetName = file.list[i], 
        col.names = TRUE, 
        row.names = FALSE, 
        append = TRUE)
    }
)

下面的手动解决方案似乎对我也没有任何帮助

df1 <- read.xlsx(file.list[1])
write.xlsx(df1, file = file_name, sheetName = file.list[1], col.names = TRUE, row.names = FALSE, append = FALSE)

df2 <- read.xlsx(file.list[2])
write.xlsx(df2, file = file_name, sheetName = file.list[2], col.names = TRUE, row.names = FALSE, append = TRUE)

到目前为止,没有错误消息。最终文件确实看到有数据写入其中,但是,似乎只有最后一个文件才能打印结果。我认为这几乎是一个覆盖周期,

2 个答案:

答案 0 :(得分:1)

也许您可以尝试以下方法:

wb <- createWorkbook(title = "Your_Workbook_Name")
lapply(1:length(file.list), function(y) lapply(1:length(file.list), function(x) writeData(wb,file.list[i],y,col.names = TRUE, row.names = FALSE, append = TRUE)))

由于我没有办法复制它,也许您可​​以了解其背后的主要思想。

双循环,在该循环中遍历所有要写入的文件,在写入之前,您需要创建一个具有索引名称的工作表,然后您可以在新创建的工作表中写入所需的数据。我希望这是可以理解的(我对lapply和sapply的了解不是最好的,但是这个想法仍然有效)

答案 1 :(得分:0)

您可以简单地在 write.xlsx 中使用数据框的命名列表。这样的事情应该可以工作:

library(openxlsx)

df.list <- lapply(file.list, read.xlsx)
named.df.lst <- setNames(df.list, file.list)

write.xlsx( named.df.lst, file = file_name )