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

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

有没有办法在R中做到这一点,并启用工作表保护?

你可以直接使用Apache POI(由xlsx使用)。 打电话

 .jcall(s1, "V", "protectSheet", "mypassword") 

在调用saveWorkbook之前。

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

 s1$protectSheet("mypassword"). 

当然,在你致电saveworkbook之前

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

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

另外,为了清楚起见,“.jcall”函数来自“rJava”包。 这个软件包必须安装并正常工作。