R Сохраните книгу Excel с защитой паролем

Я немного впечатлен, потому что пока не нашел ответа.

У меня есть небольшой сценарий 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)
}

Итак, упрощая: как мне создать файл Excel с защитой паролем в R?


person Rick    schedule 23.06.2016    source источник
comment
Привет, Рик, мой ответ оказал помощь, которую ты искал?   -  person Dale Kube    schedule 14.05.2017
comment
@ Дейл Извини, к тому времени, как ты ответил, мне это больше не нужно. Но я постараюсь создать небольшую демонстрацию, чтобы проверить ваше решение. Спасибо :)   -  person Rick    schedule 16.05.2017


Ответы (3)


Вы должны указать, хотите ли вы защитить всю книгу или отдельный лист. Если вы хотите защитить паролем отдельный лист, вы можете использовать следующую функцию rJava (перед сохранением книги):

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

Функция «.jcall» применяет пароль к указанному листу в книге. Библиотека "rJava" должна быть установлена ​​и правильно работать, чтобы это работало.

Примечание

Эта функция работает только при использовании пакета XLSX для управления файлами Excel в R. Я работал с XLConnect, чтобы сначала записать файлы, затем, используя XLSX, прочитать их обратно, применить защиту паролем и повторно сохранить файлы по тому же пути. .

person Dale Kube    schedule 30.10.2016

Если у вас есть доступ к файловому архиватору и вы не можете установить 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))
person Ape    schedule 03.08.2017

Обзор

После прочтения Как мне защитить паролем файл Excel, созданный в R, с помощью 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  
person Cristian E. Nuno    schedule 02.01.2019