如何将受密码保护的xlsx
工作簿中的工作表导入R
?
我希望能够将 Excel 工作表转换为csv
文件,而无需通过 Excel 本身。
xls 工作簿可以使用xls2csv
package中基于 perl 的函数gdata
。我认为问题是Spreadsheet::XLSX
不支持它。
有多种用于导入非加密 xlsx 工作簿的函数和包,但似乎没有一个可以解决这个问题。
目前,似乎唯一的选择是通过 Excel 或弄清楚如何编写可以做到这一点的 perl 代码。
它看起来是您需要的,但它不是 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)
为了建立 ed82 的答案,有一些警告:
您可能需要传递另一个密码参数WriteResPassword。 在此处查看文档
习惯了 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 = ...)