2015-01-20 13 views
5

Sto usando il pacchetto xlsx Versione: 0.5.7 Data: 2014-08-01. in R versione 3.0.1 (2013-05-16) - Piattaforma "Good Sport": i386-w64-mingw32/i386 (32-bit).utilizzando write.xlsx per sostituire un foglio esistente con il pacchetto R xlsx

Ho un file xlsx con almeno 2 fogli (ad esempio A e B). Ho bisogno di leggere i dati da A, modificarli e salvarli in B. Questo deve essere fatto su base periodica.

Sono in grado di leggere i dati da A con read.xlsx. Dopo aver modificato il frame dei dati, voglio salvarlo in un foglio B esistente nello stesso file xlsx.

provo con questa linea

write.xlsx(down, paste0(root,'/registration reports/registration complete_WK.xlsx'), sheet="data_final", col.names=T, row.names=F, append=T, showNA=F) 

ma mi danno questo errore:

Error in .jcall(wb, "Lorg/apache/poi/ss/usermodel/Sheet;", "createSheet", : java.lang.IllegalArgumentException: The workbook already contains a sheet of this name

ho davvero bisogno di sostituire quel foglio più volte esistenti. Come lo posso fare?

grazie, Filippo

+0

Ecco esempio, andare a fondo di questo articolo: https://danganothererror.wordpress.com/2012/02/12/write-data-frame-to-excel-file/ – kosa

+0

I non pensare che 'write.xlsx()' sovrascriva un foglio di lavoro esistente. Puoi leggere l'intero file '.xlsx' e riscrivere tutti i fogli di lavoro, incluso qualunque sia il nuovo foglio che ti serve? – Steven

+0

Di solito non supportiamo le cose "fissanti" sulle versioni obsolete di R. Qualche ragione per cui non è possibile aggiornare alla 3.1.2 e ai pacchetti corrispondenti? –

risposta

10

Se si desidera salvare il nuovo dataframe in un esistente file excel, dovete prima caricare il xlsx file:

wb <- loadWorkbook(file) 

cui i fogli avete sarete ottiene in questo modo:

sheets <- getSheets(wb) 

si può facilmente rimuovere e aggiungere (e quindi sostituire) fogli con:

removeSheet(wb, sheetName="Sheet1") 
yourSheet <- createSheet(wb, sheetName="Sheet1") 

di quanto si possa riempire i fogli con dataframes:

addDataFrame(yourDataFrame, yourSheet, <options>) 
addDataFrame(anotherDataFrame, yourSheet, startRow=nrow(yourDataFrame)+2) 

e ultimo passo è salvare l'intera cartella di lavoro come .xlsx:

saveWorkbook(wb, file) 

btw: la documentazione del xlsx-pacchetto è veramente buono e utile su tali domande :) http://cran.r-project.org/web/packages/xlsx/xlsx.pdf

+0

Grazie a tutti! Le soluzioni Solmonta e Nambari funzionano. – Filippo

0

Potrebbe essere che il Java installato sul tuo computer è incompatibile con la libreria xlsx. La seguente discussione illustra un problema simile relativamente allo stesso pacchetto: enter link description here

In alternativa, il problema può essere risolto da un diverso pacchetto correlato a Excel, ad esempio XLConnect. Vedi questo post: enter link description here

+0

Si prega di considerare l'aggiunta di ulteriori dettagli al tuo post. Nel caso in cui i tuoi link cambino o diventino non disponibili, la tua risposta non sarà utile. – dckuehn