将受密码保护的 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 创建的工作簿对象?

使用 openxlsx 在 R 中使用 write.xlsx 创建的 Excel 文件的密码保护

C#如何读取带密码的Excel文件

VBA密码保护Excel工作簿而不保存

R读取excel文件的最佳方式