我有一个使用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中执行此操作并启用工作表保护?
答案 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”包。此软件包必须安装并正常运行。