将受密码保护的xlsx工作簿导入R

时间:2012-12-21 20:22:40

标签: perl r gdata xlsx

如何将受密码保护的xlsx工作簿中的工作表导入R

我希望能够将Excel工作表转换为csv文件,而无需通过Excel本身。

xls工作簿可以使用包xls2csv中基于perl的函数gdata。我认为问题是Spreadsheet::XLSX不支持它。

有许多用于导入非加密xlsx工作簿的函数和包,但似乎都没有解决此问题。

目前似乎唯一的选择是通过Excel或弄清楚如何编写可以执行此操作的perl代码。

2 个答案:

答案 0 :(得分:4)

它看起来像你需要的东西,除了它不是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)

答案 1 :(得分:0)

基于ed82的回答,有一些注意事项:

  1. 您可能需要传递另一个密码参数 WriteResPassword See docs here

  2. 在我习惯了xlsx R软件包之后,我没有发现学习COM接口的吸引力。所以我宁愿保存一份受保护的Excel文件,不要立即使用密码,关闭它,然后用另一个包读取它:

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