我正在使用excel模板从各个人那里收集数据。为了最大程度地减少人们更改模板结构的机会,我想保护工作表,但仍然允许他们填写我想要的数据值。同时,我还使用了dataValidation
命令,该命令在Cran
版本(Stack Question)中只能使用一次
我很高兴能找到openxlsx软件包的一个分叉版本,其中包含一个功能protectWorksheet
以启用工作表保护Link。但是awalker89
分支尚未解决dataValidation
函数的问题,该问题将在tkunstek
分支中解决。
我发现了一个question关于使用不同版本的软件包的信息,但这似乎相当复杂,而且恐怕这将不起作用,因为我会将两个不同版本的软件包混合在一个excel文件中。
我可以使用诸如openxlsx
和openxlsx_tkunstek`之类的不同名称来安装openxlsx_awalker
版本,然后并行地将它们加载到我想做的事情上吗?我该怎么做?
我还可以先使用tkunstek
软件包打开excel文件,启用dataValidations,然后再使用awalker
软件包再次打开excel文件以保护工作表,但仍然不确定文件是否能正常工作之后。
我将对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)