将受密码保护的 xlsx 工作簿导入 R
Posted
技术标签:
【中文标题】将受密码保护的 xlsx 工作簿导入 R【英文标题】:Import password-protected xlsx workbook into R 【发布时间】:2012-12-09 10:09:42 【问题描述】:如何将受密码保护的xlsx
工作簿中的工作表导入R
?
我希望能够将 Excel 工作表转换为 csv
文件,而无需通过 Excel 本身。
xls 工作簿可以使用包 gdata
中的基于 perl 的函数 xls2csv
。我认为问题是Spreadsheet::XLSX
不支持它。
用于导入非加密 xlsx 工作簿的函数和包有多种,但似乎没有一个可以解决这个问题。
目前似乎唯一的选择是通过 Excel 或弄清楚如何编写可以做到这一点的 perl 代码。
【问题讨论】:
【参考方案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 的回答为基础,有几点需要注意:
您可能需要传递另一个密码参数,WriteResPassword。 See docs here
在习惯了 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 = ...)
【讨论】:
以上是关于将受密码保护的 xlsx 工作簿导入 R的主要内容,如果未能解决你的问题,请参考以下文章
Azure Blob 存储:从 Excel 工作簿中删除密码
R XLSX 和 XLConnect 包 - 使用 xlsx 包格式化由 XLConnect 创建的工作簿对象?