【问题标题】:Lock specific cells in an Excel file from R while preserving formatting从 R 锁定 Excel 文件中的特定单元格,同时保留格式
【发布时间】:2018-06-03 15:31:24
【问题描述】:

我正在尝试锁定一系列 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】:

我想我可能最终通过 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多