Блокировка определенных ячеек в файле Excel из R с сохранением форматирования

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

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

Вот мой текущий код (с использованием пакета xlsx):

wb <- loadWorkbook(file.path)
sheets <- getSheets(wb)
sh <- sheets[[1]]

lock <- CellStyle(wb, cellProtection = CellProtection(locked = TRUE))
rows <- getRows(sh, rowIndex = 9:50)
cells <- getCells(rows, colIndex = 5:6)

lapply(names(cells), function(ii) setCellStyle(cells[[ii]], lock))
.jcall(sh, "V", "protectSheet", "p@ssword")

saveWorkbook(wb, file.path)

person criticwhocounts    schedule 21.12.2017    source источник
comment
Я пытаюсь использовать ваш код для блокировки определенных ячеек, но либо весь лист заблокирован, либо ничего не заблокировано.   -  person ifreak    schedule 30.05.2018


Ответы (1)


Я думаю, что, возможно, в конце концов нашел свой собственный ответ, обойдя xlsx и XLConnect. Вместо этого я написал макрос VBA:

ActiveSheet.Unprotect ("p@ssword")
Range("E8:F50").Locked = True
ActiveSheet.Protect ("p@ssword")

а затем вызвал макрос в R (используя RDCOMClient), циклически перебирая разные листы.

xlApp <- COMCreate("Excel.Application")

xlWbk <- xlApp$Workbooks()$Open(paste0(temp.path))
xlApp$Run("LockColumns")
xlWbk$Close(TRUE)
xlApp$Quit()
person criticwhocounts    schedule 21.12.2017