2012-12-21 11 views
10

Come posso importare un foglio di lavoro da una cartella di lavoro protetta da password xlsx in R?Importare la cartella di lavoro xlsx protetta da password in R

Mi piacerebbe essere in grado di convertire un foglio di lavoro Excel in un file csv senza dover passare attraverso Excel stesso.

È possibile per le cartelle di lavoro xls utilizzare la funzione xls2csv basata su perl dal pacchetto gdata. Capisco che il problema è Spreadsheet::XLSX non lo supporta.

Esistono varie funzioni e pacchetti per l'importazione di cartelle di lavoro xlsx non crittografate, ma nessuna sembra risolvere questo problema.

Al momento sembra che le uniche alternative siano quelle di passare da Excel o capire come scrivere codice perl che può farlo.

risposta

4

Sembra di essere quello che ti serve tranne che non è con il pacchetto XLSX:

https://stat.ethz.ch/pipermail/r-help/2011-March/273678.html

library(RDCOMClient) 
eApp <- COMCreate("Excel.Application") 
wk <- eApp$Workbooks()$Open(Filename="your_file",Password="your_password") 
tf <- tempfile() 
wk$Sheets(1)$SaveAs(tf, 3) 
0

Per costruire sulla risposta di ED82, ci sono alcune avvertenze:

  1. Potrebbe essere necessario passare un altro parametro password, WriteResPassword. See docs here

  2. Non ho trovato interessante l'interfaccia COM dopo essermi abituato al pacchetto xlsx R. Così avrei preferito salvare una copia del file di Excel protetto senza password immediatamente, chiuderlo, e leggerlo con un altro pacchetto:

eApp <- COMCreate("Excel.Application") 

# Find out whether you need to pass **Password** or **WriteResPassword** 
wk <- eApp$Workbooks()$Open(Filename= filename, Password="somepass",        WriteResPassword = "somepass") 

# Save a copy, clear the password (otherwise copy is still pass-protected) 
wk$SaveAs(Filename = '...somepath...', WriteResPassword = '', Password = '') 

# The copied file is still open by COM, so close it 
wk$Close(SaveChanges = F) 

# Now read into data.frame using a familiar package {xlsx} 
my.data <- raed.xlsx('...somepath...', sheetIndex = ...) 
Problemi correlati