簡體   English   中英

如何保存Excel文件並在R中啟用單元格保護?

[英]How do you save Excel file and enable cell protection in R?

我有一個使用XLSX軟件包創建的基本Excel工作簿。 我想將其另存為.xlsx文件,但鎖定所有列(除其中一列外)以防止它們被編輯。 我可以使用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列中單元格的屬性說它們已解鎖,但是隨后我必須單擊“ Protect Sheet”並手動輸入密碼才能實際鎖定所有單元格。

有沒有辦法在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”包。 此軟件包必須已安裝並且可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM