【问题标题】:Export data frames in list to xlsx with named sheets将列表中的数据框导出到带有命名工作表的 xlsx
【发布时间】:2018-06-10 07:44:23
【问题描述】:

我需要用我的数据框列表创建一个 xlsx 文件。我遇到了这个解决方案openxlsx solution,见下文(或 Syed 的第 5 个答案)。但是,我的列表有 51 个已命名的数据框,对于一长串数据框,我应该对下面进行哪些更改?因为我创建的excel文件没有打开。

require(openxlsx)
list_of_datasets <- list("Name of DataSheet1" = dataframe1, "Name of Datasheet2" = dataframe2)
write.xlsx(list_of_datasets, file = "writeXLSX2.xlsx")

我尝试运行 write.xlsx(listname,file="") ,该命令成功运行并创建了一个 xlsx 文件,但是在打开它时,它抛出了一个错误“microsoft excel 无法打开文件,因为它已损坏”。我试图将向量的长度缩短到 1-2,但它不会打开。

编辑:暂时由 HACK 解决

#extract all data frames 
list2env(soup ,.GlobalEnv)
#reassign names and form new list 
list_of_datasets1 <- list("filename"=dataframe,.....)
#write new list
write.xlsx(list_of_datasets1, file = "template.xlsx")

【问题讨论】:

  • 每个数据框都应该是一个新工作表吗?
  • 是的,它是用来作为数据输入表单的。

标签: r list openxls


【解决方案1】:

要创建具有多个命名工作表的工作簿,必须使用createWorkbook()addWorksheet()writeDataTable()saveWorkbook()(按此顺序)而不是write.xlsx()。这是一个基于我使用随机数据创建的数据框列表生成工作表的示例。

library(openxlsx)
id <- 1:5
# create data frames
aList <- lapply(id,function(x){
   # generate output as list so we can use id as index to worksheets
   list( data.frame(matrix(runif(50),nrow=10,ncol=5)),x)
})
# initialize a workbook
wb <- createWorkbook("Workbook")
# add worksheets to workbook
lapply(aList,function(x){
     addWorksheet(wb,paste("worksheet",x[[2]])) 
     writeDataTable(wb,paste("worksheet",x[[2]]),x[[1]])
})
# save workbook to disk once all worksheets and data have been added
saveWorkbook(wb,file="./data/newWorkbook.xlsx")

...和输出,注意工作簿中有 5 个选项卡。

【讨论】:

  • 谢谢,@Len Greski。重要的是我在列表中的命名元素以工作表名称的形式出现,就像需要填写的表格一样,因此表格的名称很重要。我暂时以一种低效的方式完成了任务。请查看我的编辑。
【解决方案2】:

您也可以简单地使用 append 来创建新工作表并根据需要命名。

write.xlsx(datatable, file = "File.xlsx", sheetName = "sheet1", row.names = FALSE)

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多