保存带有密码保护的Excel工作簿

4

我有些印象深刻,因为到目前为止我还没有找到答案。

我有一个小的R脚本,从一个数据源加载数据,并从中写入几十个Excel文件。现在的问题是:这些文件需要密码保护。

目前我的脚本正在使用XLConnect库来保存Excel文件。脚本大致如下:

# Load data from source
source = <connection string to source>
dataFromSource = <read from source>

# Process
for (data in dataFromSource) {
    wb = loadWorkbook( paste("myWorkbook", sourceName, ".xlsx"), create = TRUE)
    createSheet(wb, name = "sheet")
    <put data into the "sheet">
    saveWorkbook(wb)
}

因此,简单来说:我如何在R中创建带有密码保护的Excel文件?


嗨Rick,我的回答是否提供了你所需要的帮助? - Dale Kube
@Dale 抱歉,兄弟,你回答的时候我已经不需要了。但是我会尝试创建一个小的演示来检查你的解决方案。谢谢 :) - Rick
3个回答

1

您需要指定是要保护整个工作簿还是单个工作表。如果您想要为单个工作表设置密码保护,在保存工作簿之前,可以使用以下rJava函数:

rJava::.jcall(wb$getSheet("Sheet1"),"V","protectSheet", "MyPassword123")
xlsx::saveWorkbook(wb,"C:/myfilepath)

".jcall"函数将密码应用于工作簿中指定的工作表。为使其正常工作,必须安装并正确运行"rJava"库。

注意

此功能仅在使用XLSX包在R中操作Excel文件时有效。我最初使用XLConnect编写文件,然后使用XLSX将它们读取回来,应用密码保护并将文件重新保存到相同路径。


1

概述

阅读完如何在R中使用write.xlsx创建密码保护的Excel文件?后,似乎某些软件包的版本控制起了作用。

这可能只适用于某些人的环境,但是这个解决方案刚好帮助我和同事将data.frame写入到一个受密码保护的.xlsx文件中:

# install necessary packages -----
# note: downloading the latest versions of all packages from CRAN
install.packages(c("XLConnect", "XLConnectJars", "rJava", "xlsx", "openxlsx"))

# attach necessary packages ----
library(XLConnect)

# load but do not attach the write.xlsx() function from the xlsx package ----
xlsx::write.xlsx(x = mtcars, file = "mtcars.xlsx", password = "1234_fghj")

# confirm that the .xlsx file is password protected ----
openxlsx::openXL("mtcars.xlsx")

# session info ----
sessionInfo()
# R version 3.5.1 (2018-07-02)
# Platform: x86_64-redhat-linux-gnu (64-bit)
# Running under: Red Hat Enterprise Linux
# 
# Matrix products: default
# BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so
# 
# locale:
# [1] LC_CTYPE=en_US.UTF-8         
# [2] LC_NUMERIC=C                 
# [3] LC_TIME=en_US.UTF-8          
# [4] LC_COLLATE=en_US.UTF-8       
# [5] LC_MONETARY=en_US.UTF-8      
# [6] LC_MESSAGES=en_US.UTF-8      
# [7] LC_PAPER=en_US.UTF-8         
# [8] LC_NAME=en_US.UTF-8          
# [9] LC_ADDRESS=en_US.UTF-8       
# [10] LC_TELEPHONE=en_US.UTF-8     
# [11] LC_MEASUREMENT=en_US.UTF-8   
# [12] LC_IDENTIFICATION=en_US.UTF-8
# 
# attached base packages:
# [1] stats     graphics  grDevices utils     datasets 
# [6] methods   base     
# 
# other attached packages:
# [1] XLConnect_0.2-15     XLConnectJars_0.2-15
# 
# loaded via a namespace (and not attached):
# [1] compiler_3.5.1 tools_3.5.1    yaml_2.2.0    
# [4] xlsxjars_0.6.1 rJava_0.9-10   xlsx_0.6.1  

1
如果您可以访问文件压缩程序但无法安装rJava,则可能的解决方法是将文件保存为通常格式,然后使用密码保护对其进行归档。例如,使用7-zip:
setwd("c:/Program Files/7-Zip/")
pwd <- "123"
shell(paste0("7z a d:/Data/myfile.zip d:/Data/myfile.xlsx -p", pwd))

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