Импорт защищенной паролем книги xlsx в R

Как импортировать рабочий лист из защищенной паролем книги xlsx в R?

Я хотел бы иметь возможность конвертировать лист Excel в файл csv без необходимости проходить через сам Excel.

Это возможно для книг xls, использующих функцию xls2csv на основе perl из пакета gdata. Я понимаю, что проблема Spreadsheet::XLSX не поддерживает его.

Существует множество функций и пакетов для импорта нешифрованных книг xlsx, но ни один из них не подходит для решения этой проблемы.

В настоящее время кажется, что единственные альтернативы - пройти через Excel или выяснить, как писать Perl-код, который может это сделать.

Ответ 1

Это похоже на то, что вам нужно, за исключением того, что это не с пакетом 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)

Ответ 2

Чтобы построить ответ ed82, есть несколько предостережений:

  • Вам может потребоваться передать еще один параметр пароля, WriteResPassword. См. здесь документы

  • Я не нашел, чтобы узнать интерфейс COM-интерфейса, когда я привык к пакету xlsx R. Поэтому я предпочел бы сохранить копию защищенного файла Excel без пароля немедленно, закрыть его и прочитать в другом пакете:

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 = ...)