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.
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
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")
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éé:
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")
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