Использование двух версий вилок openxlsx в одном файле - PullRequest
0 голосов
/ 16 мая 2019

Я использую шаблоны Excel для сбора данных от разных людей.Чтобы свести к минимуму шансы людей изменить структуру шаблонов, я хотел защитить листы, но при этом позволить им заполнять значения данных, которые я хочу.В то же время я также использую команду dataValidation, которую можно использовать только один раз в Cran версии ( Stack Question )

Я был счастлив, что нашел раздвоенную версиюпакет openxlsx, включающий функцию protectWorksheet для включения защиты листа, Link .Но вилка awalker89 не устранила проблему с функцией dataValidation, которая была бы исправлена ​​в вилке tkunstek.

Я нашел вопрос об использовании другой версии пакета, но это кажется довольно сложным, и я боюсь, что тогда это не сработает, потому что я бы смешивал две разные версии водин файл Excel.

Могу ли я установить openxlsx версию под разными именами, такими как openxlsx_awalker и openxlsx_tkunstek`, а затем загрузить их параллельно тому, что я хочу сделать?Как бы я это сделал?

Я также мог бы сначала открыть файл Excel с пакетом tkunstek, включить 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)
...