2017-12-21 3 views
2

Ich versuche, einen Block von Zellen in einer Reihe von Excel-Dateien zu sperren, jede Datei zu schützen und sie an ihrem ursprünglichen Speicherort zu speichern. Ich habe den Code in jeder Hinsicht funktioniert, außer dass das Sperren der Spalten diese Zellen aller Formatierung streift. Ich kann das Format nicht manuell innerhalb des xlsx-Pakets neu erstellen, da sich jede der Dateien geringfügig unterscheidet.Bestimmte Zellen in einer Excel-Datei von R sperren, während die Formatierung erhalten bleibt

Ich weiß, wie Sie Daten in Excel ohne Formatierung mit XLConnect ausgeben, aber ich kann XLConnect nicht erhalten, um Zellen zu sperren/Arbeitsmappen zu schützen. Also suche ich entweder Hilfe mit XLConnect, um die Zellen zu sperren, oder Hilfe xlsx, um die Zellen zu sperren, ohne die Formatierung zu überschreiben.

Hier ist meine aktuellen Code (xlsx-Paket mit):

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", "[email protected]") 

saveWorkbook(wb, file.path) 

Antwort

0

Ich denke, kann ich fand schließlich meine eigene Antwort von um xlsx und XLConnect gehen. Stattdessen habe ich einen Makro VBA:

ActiveSheet.Unprotect ("[email protected]") 
Range("E8:F50").Locked = True 
ActiveSheet.Protect ("[email protected]") 

und dann rief das Makro in R (mit RDCOMClient), durch die verschiedene Blätter Radfahren

xlApp <- COMCreate("Excel.Application") 

xlWbk <- xlApp$Workbooks()$Open(paste0(temp.path)) 
xlApp$Run("LockColumns") 
xlWbk$Close(TRUE) 
xlApp$Quit() 
Verwandte Themen