Instalando e carregando bibliotecas

### Instalando e Carregando as bibliotecas

lbs<-c('tidyverse','rvest','stringr','openxlsx','DT','kableExtra')

req <- substitute(require(x, character.only = TRUE))

sapply(lbs, function(x) eval(req) || {install.packages(x); eval(req)})
##  tidyverse      rvest    stringr   openxlsx         DT kableExtra 
##       TRUE       TRUE       TRUE       TRUE       TRUE       TRUE

Relação dos militares

### Nomes devem ser conforme cadastrados no SMO.

Nomes<-c("SO ELTON JOSE DE OLIVEIRA","1S WALTER ROBYSON DE JESUS SOBRINHO",
        "1S TAVES GUIMARÃES DA SILVA","2S SABRINA BASTOS COSTA",
        "2S ADOLFO MANOEL DIAS DA SILVA","2S RICHARD DA SILVA FRANCISCO DE SOUZA",
        "JULIANA ARAUJO DE ALMEIDA","3S DANILO DE SOUZA BEZERRA","3S BET GABRIEL VIEIRA TUASCO",
        "3S BCO ANNA CAROLINA DOS SANTOS CORDEIRO","3S R1 JOSÉ RAIMUNDO DE SOUSA E SILVA NETO")

### Codigo dos Militares

COD<-c("C","R","V","S","A","I","L","D","T","N","O")

### SARAM

SARAM<-c("248431-5","304570-6","332593-8","396260-1","423681-5","615692-4",
         "657695-8","665874-1","680540-0","696564-4","006521-8")

### NOME DE GUERRA

MILITAR<-c("SO BET Elton","1S BET Robynson","1S BET Taves","1S BET Sabrina",
           "2S BET Adolfo","2S BCO Richard","3S BET Juliana","3S TET Bezerra",
           "3S BET Tuasco","3S BCO Anna Carolina","TTC BCO Sousa e Silva")

(df.info<-matrix( c(COD,SARAM,MILITAR),nrow=length(COD)) )
##       [,1] [,2]       [,3]                   
##  [1,] "C"  "248431-5" "SO BET Elton"         
##  [2,] "R"  "304570-6" "1S BET Robynson"      
##  [3,] "V"  "332593-8" "1S BET Taves"         
##  [4,] "S"  "396260-1" "1S BET Sabrina"       
##  [5,] "A"  "423681-5" "2S BET Adolfo"        
##  [6,] "I"  "615692-4" "2S BCO Richard"       
##  [7,] "L"  "657695-8" "3S BET Juliana"       
##  [8,] "D"  "665874-1" "3S TET Bezerra"       
##  [9,] "T"  "680540-0" "3S BET Tuasco"        
## [10,] "N"  "696564-4" "3S BCO Anna Carolina" 
## [11,] "O"  "006521-8" "TTC BCO Sousa e Silva"

Leitura dos dados do SMO

html<-read_html(file.choose())

dados<-html_table(html, fill = TRUE)[[3]]$X4[-c(1,2)]

qtd_mes<-length(dados)/2 ; m<-seq_len(qtd_mes)

turno1<-dados[2*m-1] ;  turno2<-dados[2*m]

svc<-data.frame(turno1,turno2)

for  ( j in 1:length(Nomes))  {
  for ( i in 1:dim(svc)[2]) {
     svc[,i]<-str_replace(svc[,i],Nomes[j],COD[j])
   }
}

## Evita linhas em branco na planilha e já ordena por hier.

presentes<-unique(unlist(svc))  ; pos<-which(COD %in% presentes)

svc12h<-svc[!(svc[1]==svc[2]),] ; COD12h<-unique(unlist(svc12h))

Dados para Escala Cumprida

## Somente os que tiraram serviço no mês, mantendo a hierarquia.

datatable(svc,extensions = 'Buttons',
                         options = list(dom='Blfrtip',
                                 buttons=c('copy','csv','excel','pdf','print'),
                                 lengthMenu=list(c(10,15,20,-1),c(10,15,20,"Todas"))))

Extração para Etapas

## Somente os que tiram serviço no mês, mantendo a hier.

saram<-SARAM[pos]; cod<-COD[pos]; n<-length(cod); Info<-list()

etapas<-matrix(0,nrow=n, ncol=(qtd_mes+1)) 
  
qtd<-NULL ; info.atual<-df.info[pos,-1]
  
                    for (i in seq_len(n)){
         
                        dias<-which(svc==cod[i],arr.ind = TRUE)[,1] 
         
                        dias_12h<-sort(dias[!dias %in% dias[duplicated(dias)]]) 
                        
                        qtd[i]<-length(dias_12h)
                        
                        etapas[i,dias_12h]<-"TC"
                        
                        Info[[i]]<-list(Militar=cod[i], SARAM=saram[i], svc=dias_12h)
                    }

etapas[etapas==0]<-"" ; etapas[,qtd_mes+1]<-qtd
       
planilha_etapas<-as.data.frame(cbind(info.atual,etapas))

colnames(planilha_etapas)<-c("MILITAR","SARAM",as.character(m),"TOTAL")

datatable(planilha_etapas,extensions = 'Buttons',
                         options = list(dom='Blfrtip',
                                 buttons=c('copy','csv','excel','pdf','print')))

Dados para Boletim

str(Info) 
## List of 9
##  $ :List of 3
##   ..$ Militar: chr "C"
##   ..$ SARAM  : chr "248431-5"
##   ..$ svc    : int [1:10] 1 4 6 11 15 17 19 22 25 26
##  $ :List of 3
##   ..$ Militar: chr "R"
##   ..$ SARAM  : chr "304570-6"
##   ..$ svc    : int [1:4] 18 20 21 23
##  $ :List of 3
##   ..$ Militar: chr "V"
##   ..$ SARAM  : chr "332593-8"
##   ..$ svc    : int [1:5] 3 7 11 13 16
##  $ :List of 3
##   ..$ Militar: chr "S"
##   ..$ SARAM  : chr "396260-1"
##   ..$ svc    : int [1:10] 2 5 8 10 12 15 19 21 24 27
##  $ :List of 3
##   ..$ Militar: chr "A"
##   ..$ SARAM  : chr "423681-5"
##   ..$ svc    : int [1:10] 3 6 9 12 16 17 18 23 24 28
##  $ :List of 3
##   ..$ Militar: chr "I"
##   ..$ SARAM  : chr "615692-4"
##   ..$ svc    : int [1:5] 1 4 5 8 14
##  $ :List of 3
##   ..$ Militar: chr "L"
##   ..$ SARAM  : chr "657695-8"
##   ..$ svc    : int [1:5] 2 7 9 10 13
##  $ :List of 3
##   ..$ Militar: chr "D"
##   ..$ SARAM  : chr "665874-1"
##   ..$ svc    : int [1:4] 14 25 27 28
##  $ :List of 3
##   ..$ Militar: chr "N"
##   ..$ SARAM  : chr "696564-4"
##   ..$ svc    : int [1:3] 20 22 26

Gravação em planilha excel

wb<-createWorkbook()
addWorksheet(wb,"sheet 1")
addWorksheet(wb,"sheet 2")
writeData(wb,1,planilha_etapas,withFilter = TRUE)
writeData(wb,2,svc,withFilter = TRUE)
saveWorkbook(wb,file="Etapas_Fev21.xlsx")

Preenchimento da Planilha de Etapas

Em fase de teste!

Preenchimento da Escala Cumprida

Em fase de teste!

## Carregando uma planilha do excel (escala cumprida: arquivo .xlsx)
## e atualizando-a com os dados do data.frame DF obtidos a partir do arquivo SMO.html

#DF<-as.data.frame(df[,-1])
#wb <- loadWorkbook("arquivo.xlsx") 
#nome<-getSheetNames("arquivo.xlsx")
#writeData(wb, sheet = nome, DF,colNames = T,startRow = 9,startCol = 3)
#saveWorkbook(wb,"nome_desejado.xlsx",overwrite = T) 

# Salvar somente na primeira compilacao.         
# Antes da segunda compilacao (knit), comentar com #

  1. ↩︎