【问题标题】:Import password-protected xlsx workbook into R将受密码保护的 xlsx 工作簿导入 R
【发布时间】:2012-12-09 10:09:42
【问题描述】:

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

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

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

用于导入非加密 xlsx 工作簿的函数和包有多种,但似乎没有一个可以解决这个问题。

目前似乎唯一的选择是通过 Excel 或弄清楚如何编写可以做到这一点的 perl 代码。

【问题讨论】:

    标签: perl r gdata xlsx


    【解决方案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 的回答为基础,有几点需要注意:

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

      2. 在习惯了 xlsx R 包之后,我发现学习 COM 接口没有吸引力。所以我宁愿立即保存一份没有密码的受保护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 = ...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多