首页 文章

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

提问于
浏览
1

我有一个使用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 回答

  • 0

    您可以使用apache POI(由xlsx使用)直接执行此操作 . 打电话吧

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

    在你致电 saveWorkbook 之前 .

  • 2

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

    s1$protectSheet("mypassword").
    

    当然,在你打电话之前 saveworkbook

  • 2

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

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

    另外,为了提供清晰度,“ . jcall”函数来自“rJava”包 . 必须安装此软件包并正常运行 .

相关问题