【问题标题】:R Save a excel workbook with password protectionR保存带有密码保护的excel工作簿
【发布时间】:2016-06-23 12:16:56
【问题描述】:

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

我有一个小型 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 对不起,当你回答时,我不再需要它了。但我会尝试创建一个小演示来检查您的解决方案。谢谢:)

标签: r excel xlconnect


【解决方案1】:

您应该指定是要保护整个工作簿还是单个工作表。如果您希望对单个工作表进行密码保护,可以使用以下 rJava 函数(在保存工作簿之前):

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

“.jcall”函数将密码应用于工作簿中指定的工作表。必须安装“rJava”库并使其正常工作才能正常工作。

注意

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

【讨论】:

    【解决方案2】:

    如果您有权访问文件归档程序但无法安装 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))
    

    【讨论】:

      【解决方案3】:

      概述

      阅读How do I password-protect an Excel file created in R with write.xlsx? 后,似乎某些软件包的版本控制在这里起作用。

      这可能特定于某人的环境,但此解决方案只是帮助了一位同事,我将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  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        相关资源
        最近更新 更多