11

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

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

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

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

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

4

2 回答 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)
于 2012-12-21T21:02:36.727 回答
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 = ...)
于 2015-05-08T11:22:09.060 回答