2017-12-30 11 views
0

Ich muss eine xlsx-Datei mit meiner Liste von Datenrahmen erstellen. Ich bin auf diese Lösung gestoßen openxlsx solution, siehe unten (oder 5. Antwort von Syed). Meine Liste hat jedoch 51 benannte Datenrahmen, welche Änderungen mache ich unten für eine lange Liste von Datenrahmen? Weil meine erstellte Excel-Datei nicht geöffnet wird.Exportieren von Datenrahmen in Liste zu xlsx mit benannten Blättern

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

ich versuchte zu laufen write.xlsx (Listennamen, file = „“), lief der Befehl erfolgreich und erstellt eine xlsx-Datei, aber beim Öffnen, es wirft einen Fehler auf „Datei Microsoft Excel nicht öffnen weil es korrupt ist ". Ich habe versucht, die Länge des Vektors auf 1-2 zu verkürzen, aber es wird nicht geöffnet.

EDIT: dadurch gelöst HACK jetzt

#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") 
+0

Ist jeder Datenrahmen ein neues Blatt sein soll? – Cybernetic

+0

Ja, es ist als Dateneingabeformular gedacht. – Poppinyoshi

Antwort

1

Um eine Arbeitsmappe mit mehreren Namen Arbeitsblatt zu erstellen, muss man createWorkbook(), addWorksheet(), writeDataTable() und saveWorkbook() (in dieser Reihenfolge) anstelle von write.xlsx(). Hier ist ein Beispiel, das Arbeitsblätter basierend auf einer Liste von Datenrahmen erstellt, die ich mit zufälligen Daten erstellen.

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") 

... und die Ausgabe, dass es 5 Registerkarten in der Arbeitsmappe gibt.

enter image description here

+1

Danke, @Len Greski. Es ist wichtig, dass meine benannten Elemente in der Liste als Blattnamen ausgegeben werden. Es ist wie ein Formular, das ausgefüllt werden muss. Daher ist der Name des Formulars wichtig. Ich habe es bisher geschafft, die Aufgabe auf ineffiziente Weise zu erledigen. Bitte sehen Sie meine Bearbeitung. – Poppinyoshi

Verwandte Themen