Home » excel » List of data.frame's to individual excel worksheets – R

List of data.frame's to individual excel worksheets – R

Posted by: admin March 9, 2020 Leave a comment


I have a list of data.frame’s that I would like to output to their own worksheets in excel. I can easily save a single data frame to it’s own excel file but I’m not sure how to save multiple data frames to the their own worksheet within the same excel file.

write.xlsx(sortedTable[1], "c:/mydata.xlsx")
How to&Answers:

Specify sheet name for each list element.

file <- paste("usarrests.xlsx", sep = "")
write.xlsx(USArrests, file, sheetName = "Sheet1") 
write.xlsx(USArrests, file, sheetName = "Sheet2", append = TRUE)

Second approach as suggested by @flodel, would be to use addDataFrame. This is more or less an example from the help page of the said function.

file <- paste("usarrests.xlsx", sep="")
wb <- createWorkbook()
sheet1 <- createSheet(wb, sheetName = "Sheet1")
sheet2 <- createSheet(wb, sheetName = "Sheet2")

addDataFrame(USArrests, sheet = sheet1)
addDataFrame(USArrests * 2, sheet = sheet2)
saveWorkbook(wb, file = file)

Assuming you have a list of data.frames and a list of sheet names, you can use them pair-wise.

wb <- createWorkbook()
datas <- list(USArrests, USArrests * 2)
sheetnames <- paste0("Sheet", seq_along(datas)) # or names(datas) if provided
sheets <- lapply(sheetnames, createSheet, wb = wb)
void <- Map(addDataFrame, datas, sheets)
saveWorkbook(wb, file = file)


lets say your list of data frames is called Lst and that the workbook you want to save to is called wb.xlsx. Then you can use:

counter <- 1
for (i in length(Lst)){
   counter <- counter + 1



Here’s the solution with openxlsx:

## create data;
dataframes <- split(iris, iris$Species)

# create workbook
wb <- createWorkbook()

#Iterate the same way as PavoDive, slightly different (creating an anonymous function inside Map())
Map(function(data, nameofsheet){     

    addWorksheet(wb, nameofsheet)
    writeData(wb, nameofsheet, data)

}, dataframes, names(dataframes))

## Save workbook to excel file 
saveWorkbook(wb, file = "file.xlsx", overwrite = TRUE)

.. however, openxlsx is also able to use it’s function openxlsx::write.xlsx for this, so you can just give the object with your list of dataframes and the filepath, and openxlsx is smart enough to create the list as sheets within the xlsx-file. The code I post here with Map() is if you want to format the sheets in a specific way.