【问题标题】:Password protecting an Excel file created using write.xlsx in R with openxlsx使用 openxlsx 在 R 中使用 write.xlsx 创建的 Excel 文件的密码保护
【发布时间】:2021-09-23 07:42:01
【问题描述】:

我想用密码保护我正在使用特定工作流程创建的大量 .xslx 文件。工作流程很简单,并且依赖于我使用 R 中 openxlsx 中的 write.xlsx 命令编写的较小数据帧的命名列表。是否有解决方案可以使用类似的工作流程使用 protectWorkbook 密码保护这些文件?谢谢。

library(tidyverse)
library(openxlsx)


## Create reprex using diamonds

df_ls <- diamonds %>% 
  select_if(is.ordered) %>% 
  gather(key, value) %>% 
  split(.$key)
#> Warning: attributes are not identical across measure variables;
#> they will be dropped



## I like to use lists to write to .xlsx
## because write.xlsx creates each object 
## in the list as its own sheet and names
## it using the list names.


.path <- tempfile(fileext = ".xlsx")

write.xlsx(df_ls, file = .path)


## I want to password protect this file(s)

map(.path, ~{protectWorkbook(.x, protect = TRUE, password = "random-password")})

# Error in protectWorkbook(.x, protect = TRUE, password = "random-password") : 
#   First argument must be a Workbook.

reprex package (v2.0.0) 于 2021-07-14 创建

【问题讨论】:

    标签: r excel password-protection openxlsx


    【解决方案1】:

    您需要首先创建一个工作簿对象,因为我认为这就是错误所指示的。 write.xlsx 未被识别为工作簿对象,并且是protectWorkbook 参数所必需的。

    df_ls <- diamonds %>% 
      select_if(is.ordered) %>% 
      gather(key, value) %>% 
      split(.$key)
    
    wb = createWorkbook()
    
    lapply(seq_along(df_ls), function(i){
      addWorksheet(wb=wb, sheetName = names(df_ls[i])) #Add each sheet
      writeData(wb, sheet = i, df_ls[[i]])       #Add data to each sheet
      protectWorksheet(wb, sheet = i, protect = TRUE, password = "Password") #Protect each sheet
      })
    
    saveWorkbook(wb, "example.xlsx", overwrite = TRUE)
    

    【讨论】:

    • 有没有办法可以直接传递带有多张工作表的工作簿对象?
    猜你喜欢
    • 2018-11-24
    • 2012-02-07
    • 1970-01-01
    • 2019-05-06
    • 2012-09-11
    • 1970-01-01
    • 2013-02-16
    • 2020-09-23
    相关资源
    最近更新 更多