2011-10-25 34 views
2

我試圖使用xlsx程序包將已命名的數據幀列表保存爲xlsx文件。列表中的數據框全部被命名,但如果它在列表中的未命名元素上工作,它也會很好。將已命名的data.frames列表寫入xlsx文件

下面是我寫的函數:

toXLS <- function(myList,myFile) { 

    #Initialize output workbook 
    require(xlsx) 
    wb <- createWorkbook() 
    for (name in names(myList)) { 
     createSheet(wb, sheetName=name) 
    } 

    #Write blank workbook to file 
    saveWorkbook(wb, myFile) 

    #Write output data to saved workbook 
    for (name in names(myList)) { 
     write.xlsx(myList[[name]], myFile, sheetName=name) 
    } 
} 

myList <- list(a=data.frame(1,2,3),b=data.frame('a','b','c'),d=data.frame('01-01-1900')) 
toXLS(myList,paste(getwd(),'/output.xlsx',sep='')) 

它的工作原理沒事,但每次我打電話write.xlsx時間將覆蓋輸出工作簿。如何將數據框插入工作簿中?

我沒有和xlsx軟件包結婚,但它似乎提供了一個很好的excel文件界面,只需要最少的設置。我也接受其他不錯的選擇。

回答

10

首先創建Excel文件:

wb <- createWorkbook() 
saveWorkbook(wb, 'output.xlsx') 

然後每個工作簿追加:

lapply(names(myList), function(x) write.xlsx(myList[[x]], 'output.xlsx', sheetName=x, append=TRUE)) 
3

在致電write.xlsx時使用append = TRUE

+0

如何覆蓋現有文件,然後命名錶追加到它? – Zach

+1

當我運行上面的代碼,改變'append = TRUE',我得到以下錯誤:錯誤.jcall(wb,「Lorg/apache/poi/ss/usermodel/Sheet;」,「createSheet」,: java.lang.IllegalArgumentException:工作簿已經包含這個名稱的一張表' – Zach

+0

append = TRUE拋出Zach上面複製的錯誤。 – Docuemada