【问题标题】:Keep protection(or re-protect) certain columns of imported Excel workbook through R通过 R 保持保护(或重新保护)导入的 Excel 工作簿的某些列
【发布时间】:2023-04-11 01:27:01
【问题描述】:

我有一个包含两张工作表的 Excel 工作簿。在第一个工作表上,B 列和 C 列具有防止编辑的公式(指的是第二个仍然为空的工作表)。现在我通过 R 导入了这个工作簿,将我的数据添加到第二张表并保存了工作簿。

library(openxlsx)
wb <- loadWorkbook('Tables.xlsx')
writeData(wb, 'Sheet2', mydf)
saveWorkbook(wb, New_tables.xlsx')

但是,保存工作簿后,工作表 1 的 B 列和 C 列不再受到保护。是否可以添加任何特定功能来保护(仅)表 1 中的列 B 和 C 不被编辑?

谢谢!

【问题讨论】:

    标签: r excel openxlsx


    【解决方案1】:

    您可以使用protectWorksheet 函数。

    您需要createStyle 设置locked = TRUEFALSE,然后您可以控制要锁定编辑的列和行。 例如:

    library(openxlsx)
    wb <- createWorkbook()
    addWorksheet(wb, "NEW")
    writeData(wb, "NEW", mtcars)
    addStyle(wb, "NEW", rows = 1:nrow(mtcars), cols = 1, gridExpand = TRUE, style = createStyle(locked = FALSE))
    protectWorksheet(wb, "NEW", protect = TRUE)
    saveWorkbook(wb, "New_tables.xlsx", overwrite = TRUE)
    

    这会将第一列锁定到填充数据的行并锁定其他所有位置。

    【讨论】:

    • 感谢您的回复,但不幸的是,这对我不起作用。它给了我以下错误: createStyle 中的错误(locked = FALSE):未使用的参数(locked = FALSE)
    • 听起来您使用的是旧版本的openxlsx。尝试更新包装然后你应该看到locked 选项。 ?createStyle 会给你createStyle(fontName = NULL, fontSize = NULL, fontColour = NULL, numFmt = "GENERAL", border = NULL, borderColour = getOption("openxlsx.borderColour", "black"), borderStyle = getOption("openxlsx.borderStyle", "thin"), bgFill = NULL, fgFill = NULL, halign = NULL, valign = NULL, textDecoration = NULL, wrapText = FALSE, textRotation = NULL, indent = NULL, locked = NULL, hidden = NULL)
    • 已修复错误。使用您建议保护整个工作表的命令,是否还有一种方法可以仅保护特定列?
    • 参见上面的答案 - 在addStyle 中,您需要指定要取消保护的列。在上面的示例中,您将取消保护 A 列。
    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多