使用 openxlsx 在 R 中使用 write.xlsx 创建的 Excel 文件的密码保护
Posted
技术标签:
【中文标题】使用 openxlsx 在 R 中使用 write.xlsx 创建的 Excel 文件的密码保护【英文标题】:Password protecting an Excel file created using write.xlsx in R with openxlsx 【发布时间】: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 创建
【问题讨论】:
【参考方案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)
【讨论】:
有没有办法可以直接传递带有多张工作表的工作簿对象?以上是关于使用 openxlsx 在 R 中使用 write.xlsx 创建的 Excel 文件的密码保护的主要内容,如果未能解决你的问题,请参考以下文章
使用 openxlsx 将 Excel 数据导入 R:文件中的错误(con,“r”):无效的“描述”参数
在 R 中使用 openxlsx 进行条件格式化的 Tidyverse/更快的解决方案?