![](/img/trans.png)
[英]How do you save an Excel file with multiple sheets as an RDS file for use in 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.