从R中锁定Excel文件中的特定单元格,同时保留格式

问题描述 投票:2回答:1

我正在尝试锁定一系列Excel文件中的单元格块,保护每个文件,并将它们保存在原始位置。我有代码工作的各种方式,除了锁定列剥离所有格式的单元格。我无法在xlsx包中手动重新创建格式,因为每个文件都略有不同。

我知道如何在不使用XLConnect进行格式化的情况下将数据输出到Excel中,但是我无法通过XLConnect来锁定单元格/保护工作簿。因此,我要么使用XLConnect来锁定单元格,要么帮助使用xlsx锁定单元格而不覆盖格式。

这是我当前的代码(使用xlsx包):

wb <- loadWorkbook(file.path)
sheets <- getSheets(wb)
sh <- sheets[[1]]

lock <- CellStyle(wb, cellProtection = CellProtection(locked = TRUE))
rows <- getRows(sh, rowIndex = 9:50)
cells <- getCells(rows, colIndex = 5:6)

lapply(names(cells), function(ii) setCellStyle(cells[[ii]], lock))
.jcall(sh, "V", "protectSheet", "p@ssword")

saveWorkbook(wb, file.path)
r excel xlconnect r-xlsx openxls
1个回答
0
投票

我想我最终可以通过绕过xlsx和XLConnect找到我自己的答案。相反,我写了一个VBA宏:

ActiveSheet.Unprotect ("p@ssword")
Range("E8:F50").Locked = True
ActiveSheet.Protect ("p@ssword")

然后在R中调用宏(使用RDCOMClient),循环遍历不同的工作表

xlApp <- COMCreate("Excel.Application")

xlWbk <- xlApp$Workbooks()$Open(paste0(temp.path))
xlApp$Run("LockColumns")
xlWbk$Close(TRUE)
xlApp$Quit()
© www.soinside.com 2019 - 2024. All rights reserved.