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

11
如何将受密码保护的 xlsx 工作簿中的工作表导入到 R 中?
我希望能够将 Excel 工作表转换为 csv 文件,而无需通过 Excel 自身进行操作。
对于使用 xls 工作簿可以使用基于 Perl 的函数 gdata 包中的 xls2csv。 我了解到问题是 Spreadsheet::XLSX 不支持它。
有各种导入非加密 xlsx 工作簿的函数和包,但似乎没有一个能解决这个问题。
目前似乎唯一的选择是通过 Excel 进行操作,或者弄清楚如何编写可完成此操作的Perl代码。
2个回答

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)

0

在ed82的回答基础上,有几个注意点:

  1. 你可能需要传递另一个密码参数WriteResPassword请参阅此处的文档

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接