1

我正在使用 excel 模板从不同的人那里收集数据。为了尽量减少人们更改模板结构的机会,我想保护工作表,但仍允许他们填写我想要的数据值。同时我也使用dataValidation了版本中只能使用一次的命令Cran堆栈问题

我很高兴我找到了 openxlsx 包的分叉版本,其中包含一个protectWorksheet启用工作表保护的功能Link。但是awalker89fork 并没有解决该dataValidation功能的问题,这将在tkunstekfork 中修复。

我发现了一个关于使用不同版本的包的问题,​​但它似乎相当复杂,我担心这将不起作用,因为我会在一个 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)
4

0 回答 0