我有一个使用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列中单元格的属性表示它们已解锁,但之后我必须单击“保护工作表”并手动输入密码才能实际锁定所有单元格 .
有没有办法在R中执行此操作并启用工作表保护?
3 回答
您可以使用apache POI(由xlsx使用)直接执行此操作 . 打电话吧
在你致电
saveWorkbook
之前 .我一直在使用@AEF的答案 . 但今天我发现这实际上可以在xlsx包中完成:
当然,在你打电话之前
saveworkbook
如果工作表未存储为对象,则可以使用“.jcall”函数中的getSheet()方法对工作表进行传唤:
rJava::.jcall(wb$getSheet("Sheet1"),"V","protectSheet", "MyPassword123")
xlsx::saveWorkbook(wb,"C:/myfilepath)
另外,为了提供清晰度,“ . jcall”函数来自“rJava”包 . 必须安装此软件包并正常运行 .