2

我需要用我的数据框列表创建一个 xlsx 文件。我遇到了这个解决方案openxlsx 解决方案,见下文(或 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")
4

2 回答 2

4

要创建具有多个命名工作表的工作簿,必须使用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 个选项卡。

在此处输入图像描述

于 2017-12-30T01:32:53.807 回答
0

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

write.xlsx(datatable, file = "File.xlsx", sheetName = "sheet1", row.names = FALSE)
于 2018-07-19T21:00:41.027 回答