R: façon facile d'exporter des données multiples.cadre à plusieurs feuilles de travail excel?

je suis surpris de trouver qu'il n'est pas facile pour l'exportation de données multiples.cadre à plusieurs feuilles de calcul d'un fichier excel? J'ai essayé le paquet xlsx, il semble qu'il ne puisse écrire que sur une seule feuille (outrepasser l'ancienne feuille); j'ai aussi essayé le paquet WriteXLS, mais il me donne l'erreur tout le temps...

ma structure de code est comme ceci: par conception, pour chaque itération, la base de données de sortie (tempTable) et le sheetName (sn) ont été mis à jour et exportés dans un onglet.

for (i in 2 : ncol(code)){ 
        ...
        tempTable <- ...
        sn <- ...
        WriteXLS("tempTable", ExcelFileName = "C:/R_code/../file.xlsx",
              SheetNames = sn);
}

je peux exporter vers plusieurs fichiers cvs, mais il y a un moyen facile de le faire dans excel, droit?

Merci d'avance.

45
demandé sur eipi10 0000-00-00 00:00:00

5 réponses

Vous pouvez écrire à plusieurs feuilles avec le xlsx package. Vous avez juste besoin d'utiliser un autre sheetName pour chaque bloc de données et vous devez l'ajouter append=TRUE:

library(xlsx)
write.xlsx(dataframe1, file="filename.xlsx", sheetName="sheet1", row.names=FALSE)
write.xlsx(dataframe2, file="filename.xlsx", sheetName="sheet2", append=TRUE, row.names=FALSE)

une autre option, qui vous donne plus de contrôle sur le formatage et l'emplacement de la base de données, est de tout faire dans le code R/xlsx et ensuite de sauvegarder le classeur à la fin. Par exemple:

wb = createWorkbook()

sheet = createSheet(wb, "Sheet 1")

addDataFrame(dataframe1, sheet=sheet, startColumn=1, row.names=FALSE)
addDataFrame(dataframe2, sheet=sheet, startColumn=10, row.names=FALSE)

sheet = createSheet(wb, "Sheet 2")

addDataFrame(dataframe3, sheet=sheet, startColumn=1, row.names=FALSE)

saveWorkbook(wb, "My_File.xlsx")

dans le cas où vous pourriez le trouver utile, voici quelques fonctions d'aide intéressantes qui le rendent plus facile d'ajouter du formatage, des métadonnées et d'autres fonctionnalités aux tableurs en utilisant xlsx: http://www.sthda.com/english/wiki/r2excel-read-write-and-format-easily-excel-files-using-r-software

87
répondu eipi10 2017-05-11 17:37:09

Vous pouvez également utiliser la bibliothèque openxlsx pour exporter plusieurs ensembles de données vers plusieurs feuilles dans un seul classeur.L'avantage d'openxlsx par rapport à xlsx est qu'openxlsx supprime les dépendances sur les bibliothèques java.

Écrire une liste de données.cadres vers des feuilles de travail individuelles en utilisant des noms de liste comme noms de feuille de travail.

require(openxlsx)
list_of_datasets <- list("Name of DataSheet1" = dataframe1, "Name of Datasheet2" = dataframe2)
write.xlsx(list_of_datasets, file = "writeXLSX2.xlsx")
39
répondu Syed 2016-04-05 19:26:26

je ne suis pas familier avec le paquet WriteXLS; je l'utilise généralement XLConnect:

library(XLConnect)
##
newWB <- loadWorkbook(
  filename="F:/TempDir/tempwb.xlsx",
  create=TRUE)
##
for(i in 1:10){
  wsName <- paste0("newsheet",i)
  createSheet(
    newWB,
    name=wsName)
  ##
  writeWorksheet(
    newWB,
    data=data.frame(
      X=1:10,
      Dataframe=paste0("DF ",i)),
    sheet=wsName,
    header=TRUE,
    rownames=NULL)
}
saveWorkbook(newWB)

cela peut certainement être vectorisé, comme @joran l'a noté ci-dessus, mais juste pour générer des noms de feuilles dynamiques rapidement, j'ai utilisé un for une boucle à démontrer.

j'ai utilisé le create=TRUE argument loadWorkbook depuis que j'ai créé un nouveau .XLSX file, mais si votre fichier existe déjà, vous n'avez pas à le spécifier, car la valeur par défaut est FALSE.

Voici un quelques captures d'écran du classeur créé:

enter image description here

enter image description here

enter image description here

7
répondu nrussell 2014-12-30 22:21:09

Il y a une nouvelle bibliothèque de la ville, des rOpenSci: writexl

Portable, la lumière-poids de la trame de données au format xlsx exportateur basé sur libxlsxwriter. Pas de Java ou D'Excel requis

je l'ai trouvé mieux et plus vite que les suggestions ci-dessus (en collaboration avec le dev de la version):

library(writexl)
sheets <- list("sheet1Name" = sheet1, "sheet2Name" = sheet2) #assume sheet1 and sheet2 are data frames
write_xlsx(sheets, "path/to/location")
7
répondu Giora Simchoni 2017-11-01 11:32:51

beaucoup de bonnes réponses ici, mais certaines sont un peu périmées. Si vous voulez ajouter d'autres feuilles de travail à un seul fichier, alors c'est l'approche que je trouve fonctionne pour moi. Pour plus de clarté, voici le workflow pour openxlsx version 4.0

# Create a blank workbook
OUT <- createWorkbook()

# Add some sheets to the workbook
addWorksheet(OUT, "Sheet 1 Name")
addWorksheet(OUT, "Sheet 2 Name")

# Write the data to the sheets
writeData(OUT, sheet = "Sheet 1 Name", x = dataframe1)
writeData(OUT, sheet = "Sheet 2 Name", x = dataframe2)

# Export the file
saveWorkbook(OUT, "My output file.xlsx")

EDIT

j'ai maintenant t

4
répondu