如何保存Excel文件并在R中启用单元格保护?

时间:2016-08-22 19:32:33

标签: r excel

我有一个使用XLSX包创建的基本Excel工作簿。我想将其保存为.xlsx文件,但锁定除1之外的所有列以防止它们被编辑。我可以使用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列中单元格的属性表示它们已解锁,但之后我必须单击“保护工作表”并手动输入密码才能实际锁定所有单元格。 / p>

有没有办法在R中执行此操作并启用工作表保护?

3 个答案:

答案 0 :(得分:2)

您可以直接使用apache POI(由xlsx使用)执行此操作。只需致电

.jcall(s1, "V", "protectSheet", "mypassword")
在致电saveWorkbook之前

答案 1 :(得分:2)

我一直在使用@AEF的回答。但是今天我发现这实际上可以在xlsx包中完成:

s1$protectSheet("mypassword").

当然,在致电saveworkbook

之前

答案 2 :(得分:0)

如果工作表未存储为对象,则可以使用“.jcall”函数中的getSheet()方法对工作表进行传唤:

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

另外,为了清楚起见,“。jcall”函数来自“rJava”包。此软件包必须安装并正常运行。