【发布时间】:2016-12-29 11:13:15
【问题描述】:
我有一个使用 XLSX 包创建的基本 Excel 工作簿。我想将其保存为 .xlsx 文件,但锁定除一个之外的所有列以保护它们不被编辑。我可以使用CellProtection() 函数为选定列设置单元格保护,但我不知道如何为工作表打开密码保护以真正保护列。
library(xlsx)
wb = createWorkbook()
s1 = createSheet(wb, "Sheet 1")
addDataFrame(mtcars, s1) #using mtcars as example dataset
cs = CellStyle(wb, cellProtection = CellProtection(locked=F)) #setting style to unlock cells
rows <- getRows(s1, rowIndex=2:101)
cells <- getCells(rows, colIndex = c(2)) #getting the cells to unlock
lapply(names(cells), function(ii)setCellStyle(cells[[ii]],cs)) #applying unlocking to all columns except the second one (the one i want to leave locked)
saveWorkbook(wb, "file.xlsx")
当我检查 Excel 文件时,第 2 列中单元格的属性显示它们已解锁,但随后我必须单击“保护表”并手动输入密码才能真正锁定所有单元格。
有没有办法在 R 中执行此操作并启用工作表保护?
【问题讨论】:
-
我认为这没有实现(该包的帮助页面中没有提到“密码”)和 XLConnect::loadworkbook 的帮助页面(这是如何创建 R 对象的实例"workbook"-class) 说:“password 打开受密码保护的文件时使用的密码。默认 NULL 表示不使用密码。使用 create = TRUE 创建新文件时,此参数将被忽略。”
-
感谢 Hack-R 和 42-;是的,使用 XLConnect,您可以在保存时对整个工作簿进行密码保护,但这对我不起作用。我只是想保护一些单元格不被用户编辑。例如,我知道这在 SAS 中是可能的,所以我认为这在 R 中是小菜一碟——不过我错了。
-
@rocket1906 这很有趣,你是怎么做到的?我看到他们的文档说它可以读取受密码保护的文件,但没有提到用密码保存文件。很高兴知道以供将来参考。
-
@Hack-R 抱歉,我在考虑包 RDCOMClient。方法如下: eApp
-
尚未测试我对手册的阅读,但我认为它说您只能在使用密码打开文件后保存受密码保护的文件。您似乎无法创建受密码保护的文件 de_novo