在不安装 Java 的情况下将受密码保护的 xlsx 文件读入 R(密码已知)

Posted

技术标签:

【中文标题】在不安装 Java 的情况下将受密码保护的 xlsx 文件读入 R(密码已知)【英文标题】:Reading a password-protected xlsx-file into R without installing Java (password is known) 【发布时间】:2021-05-11 21:26:20 【问题描述】:

目前我正在为一位客户准备 R 课程。我们想从受密码保护的 xlsx 文件中读取数据。因此,我试图将这个受密码保护的 xlsx 文件读入 R (取消保护文件本身不是解决方案)。不幸的是,我不能使用包括安装附加软件的方法,例如 Java。

openxlsxreadrreadxl 似乎都不支持在读取 excel 文件时使用密码。

似乎有两个软件包支持这一点:xlsxexcel.link 我已经尝试过 xlsx 包,但它需要 Java。 XLConnect

也是如此

我已经尝试过 excel.link 包,但每次我尝试打开文件时它都会崩溃(“R 会话中止”)。 RDCOMClient也是如此。

不幸的是,*** 帖子不适合我的问题:

How do you read a password protected excel file into r?

How to read an .xls file that is encrypted with R?

Import password-protected xlsx workbook into R

Reading Any kind of password protected file into R

How to read an .xls file that is encrypted with R?

在遇到这些问题后,我刚刚更新了我所有的包。这是关于我的 R 版本的信息。

 version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          4                           
minor          0.3                         
year           2020                        
month          10                          
day            10                          
svn rev        79318                       
language       R                           
version.string R version 4.0.3 (2020-10-10)
nickname       Bunny-Wunnies Freak Out     

您知道其他适合我需要的软件包吗?您是否也知道为什么 excel.link 和 RODCOMClient 似乎根本不起作用?

非常感谢您的任何建议!

【问题讨论】:

您无法在 Excel 中打开文件,然后将数据复制/粘贴到新文件中? 对不起,如果我没有清楚地表达自己的意思:我确实有密码,我可以撤消密码保护。但解决方案的一部分需要是原始文件始终保持密码保护(我们可能会问这是否有意义,但无论如何我需要解决方案)。 feature request for readxl 的讨论(已关闭,未实现)很有趣 - 因为 Excel 会加密文件,似乎获取它的方法非常有限。要么是来自 MS 的 C++ v 11 包,要么是让 Excel 来做(可能是需要 Java 的包使用的方法......)。 我很想弄错,但在这一点上听起来有一些方法可以将受密码保护的 Excel 文件读入依赖 Java 的 R 中,并且有一些方法可以将 Excel 文件读入 R没有 Java,但不能两者兼有。 【参考方案1】:

我已经能够使用以下代码使用 RDCOMClient 打开受密码保护的 Excel 文件:

library(RDCOMClient)
xlApp <- COMCreate("Excel.Application")
xlWbk1 <- xlApp$Workbooks()$Open("C:\\..\\Test.xlsx", Password = "my_Password")
xlWbk1$sheets(1)$cells(8,3)$value()

【讨论】:

以上是关于在不安装 Java 的情况下将受密码保护的 xlsx 文件读入 R(密码已知)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不覆盖 TTY 的情况下将密码传递给 su/sudo/ssh?

在不安装 Xcode 的情况下将 GCC 安装到 Mac OS X Leopard

如何在不泄露敏感信息的情况下将 Node-Red 推送到 GitHub?

在不安装 Ghostscript 的情况下将 PDF 文档转换为 PHP 中的预览图像

如何在不为 Java Bridge 添加 tomcat 服务器的情况下将 Java 后端添加到现有 PHP 站点?

java bindings - 如何在不获取-0.0值的情况下将float绑定到jtable?