我正在使用 excel 模板从不同的人那里收集数据。为了尽量减少人们更改模板结构的机会,我想保护工作表,但仍允许他们填写我想要的数据值。同时我也使用dataValidation
了版本中只能使用一次的命令Cran
(堆栈问题)
我很高兴我找到了 openxlsx 包的分叉版本,其中包含一个protectWorksheet
启用工作表保护的功能Link。但是awalker89
fork 并没有解决该dataValidation
功能的问题,这将在tkunstek
fork 中修复。
我发现了一个关于使用不同版本的包的问题,但它似乎相当复杂,我担心这将不起作用,因为我会在一个 excel 文件中混合两个不同的版本。
我可以openxlsx
以不同的名称安装版本,例如openxlsx_awalker
和 openxlsx_tkunstek`,然后将它们并行加载到我想做的事情吗?我该怎么做?
我也可以先用tkunstek
包打开 excel 文件,启用 dataValidations,然后用awalker
包再次打开它以保护工作表,但仍然不确定这些文件之后是否可以工作。
我将按如下方式对 MWE 进行成像
library(openxlsx_awalker)
library(openxlsx_tkunstek)
wb <- createWorkbook()
addWorksheet(wb, "S1")
writeDataTable(wb, 1, x = data.frame(iris[1:30,],yesno="Yes",highlow="Low"))
addWorksheet(wb, "Drop-down values", visible=FALSE)
yesno_values_df = data.frame("YESNO" = c("Yes", "No"))
yesno.labels<-"'Drop-down values'!$A$2:$A$3"
source_values_df = data.frame("Sources" = c("High", "Low"))
highlow.labels<-"'Drop-down values'!$B$2:$B$3"
writeData(wb, sheet = "Drop-down values", x =yesno_values_df, startCol =1)
writeData(wb, sheet = "Drop-down values", x =source_values_df, startCol =2)
openxlsx_tkunstek::dataValidation(wb, "S1", col = 6, rows = 1:10,
type = "list", value =yesno.labels)
openxlsx_tkunstek::dataValidation(wb, "S1", col = 7, rows = 1:10,
type = "list", value =highlow.labels)
# Formatting cells / columns is allowed , but inserting / deleting columns is protected:
openxlsx_awalker::protectWorksheet(wb, "S1", protect = TRUE, lockFormattingCells = FALSE, lockFormattingColumns = FALSE, lockInsertingColumns = TRUE, lockDeletingColumns = TRUE)
saveWorkbook(wb, "test.xlsx", overwrite = TRUE)