Tabla No1

  • bg(ft, bg = “midnightblue”, part = “header”): Resalta de color azul (midnightblue) el encabezado de la tabla.

  • color(ft, color = “white”, part = “header”): Escribe con color blanco el encabezado.

  • ft <- align(ft, j = c(1:3), align = “center”, part = “all” ): Centra las columnas uno, hasta la tres.

  • bold(ft, part = “header”): Resalta el encabezado

  • set_caption(ft, caption = “Primer Ejercicio”, autonum = run_autonum(seq_id =“tab”,pre_label = “Tabla”,bkm= “tab1”)) : Título a la tabla, pre_label: indica como deberá iniciar la tabla

  • ft <- add_footer_lines(ft, ‘Fuente: REDY’): Indica la fuente de elaboración de la tabla

Código

ft <- flextable(Sub)

ft <- colformat_num(x = ft,
      big.mark=".", decimal.mark = ",",
      na_str = "N/A")


ft <- bg(ft, bg = "midnightblue", part = "header")
ft <- color(ft, color = "white",  part = "header")

ft <- flextable::width(ft, width = 1)
ft <- flextable::align(ft, j = c(2:3), align = "center", part = "all" )
ft <- flextable::bold(ft, part = "header") 
ft <- flextable::set_caption(ft, caption = "Primer Ejercicio", autonum = run_autonum(seq_id ="tab",pre_label = "Tabla ",bkm= "tab1"))


# Modificar líneas
big_border <- fp_border(color="black", style="solid", width=1)

ft <- hline_top(ft, part="all", border = big_border)

ft <- hline(ft, part="body", border = big_border)

ft <- border_inner(ft, border = big_border)

ft <- vline(ft, border = big_border )

ft <- vline_left(ft, border = big_border)

ft <- add_footer_lines(ft, 'Fuente: REDY')

ft

Si por el contrario, la plantilla de ese cuadro, se mantendrá a lo largo del documento, y con el objetivo de no copiar y pegar toda la rutina, podremos generar la siguiente función.

  • Si queremos que la fuente, tenga un espacio de separación, se aplica lo siguiente:

table <- height(table, height = .20, part=‘footer’) table <- hrule(table, rule = “exact”, part = ‘footer’)

make.flextable <- function(data) {

table <- flextable(data)   
  
table <- colformat_num(x = table,
          big.mark=".", decimal.mark = ",",
          na_str = "N/A")

# Modificar líneas
big_border <- fp_border(color="black", style="solid", width=1)

table <- hline_top(table, part="all", border = big_border)

table <- hline(table, part="body", border = big_border)

table <- border_inner(table, border = big_border)

table <- vline(table, border = big_border )

table <- vline_left(table, border = big_border)

table <- bg(table, bg = "midnightblue", part = "header")
table <- color(table, color = "white",  part = "header")

table <- flextable::width(table, width = 1)
table <- flextable::align(table, j = c(2:3), align = "center", part = "all" )
table <- flextable::bold(table, part = "header") 

#Fuente

table <- flextable::add_footer_lines(table, "Fuente: Redy")

#Tipo de Letra

table <- flextable::font(table, fontname = "Calibri", part = "all")
table <- flextable::fontsize(table, size = 11, part = "all")

#Footer
table <- flextable::font(table, fontname = "Calibri", part = "footer")
table <- flextable::fontsize(table, size = 9, part =  "footer")

#Distancia de la fuente
table <- flextable::height(table, height = .20, part='footer')
table <- flextable::hrule(table, rule = "exact", part = 'footer')

return(autofit(table))

} 

y al aplicar aspectos específicos en la rutina, se agrega de la siguiente manera:

ft <- flextable::bold(ft, i= 2): Esta opción permite resaltar la fila tercera.

ft <- make.flextable(Sub) 
ft <- flextable::set_caption(ft, caption = "Tabla No2", autonum =  run_autonum(seq_id ="tab",pre_label = "Tabla ",bkm= "tab2"))
ft <- flextable::bold(ft, i= 2)
ft

Si por el contrario, queremos ajustar la tabla de acuerdo a nuestros propios límites, corremos la siguiente rutina.

ft <- make.flextable(Sub) 
#ft <- set_table_properties(ft, width = .8, layout = "autofit")

ft <- flextable::width(ft, j = c(1,2,3), width = c(1.5,0.5, 0.5))
ft <- flextable::align(ft, j = c(2:3), align = "center", part = "all" )

ft <- flextable::height_all(ft, height = .50)
ft <- flextable::hrule(ft, rule = "exact", part = "all")

ft <- flextable::set_caption(ft, caption = "Tabla No3: Ajustes Propios", autonum =  run_autonum(seq_id ="tab",pre_label = "Tabla ",bkm= "tab13"))

ft <- flextable::bold(ft, i= 2)
ft

Combinar (merge)

En esta sección analizaremos cómo combinar la información de filas que se repiten dentro de una columna.

df <- make.flextable_Two(df) 

df <- flextable::merge_at(df, i=2:3, j=2)
df <- flextable::merge_at(df, i=4:7, j=2)

df <- flextable::bold(df,part = "header")

df

Resaltar la última fila

make.flextable_AV <- function(data) {

table <- flextable(data)   
  
table <- colformat_num(x = table,
          big.mark=".", decimal.mark = ",",
          na_str = "N/A")

# Modificar líneas
big_border <- fp_border(color="black", style="solid", width=1)

table <- hline_top(table, part="all", border = big_border)

table <- hline(table, part="body", border = big_border)

table <- border_inner(table, border = big_border)

table <- vline(table, border = big_border )

table <- vline_left(table, border = big_border)

table <- bg(table, bg = "midnightblue", part = "header")
table <- color(table, color = "white",  part = "header")

table <- flextable::width(table, width = 1)
table <- flextable::align(table, j = c(2:3), align = "center", part = "all" )
table <- flextable::bold(table, part = "header") 

#Fuente

table <- flextable::add_footer_lines(table, "Fuente: Redy")

#Tipo de Letra

table <- flextable::font(table, fontname = "Calibri", part = "all")
table <- flextable::fontsize(table, size = 11, part = "all")

#Footer
table <- flextable::font(table, fontname = "Calibri", part = "footer")
table <- flextable::fontsize(table, size = 9, part =  "footer")

#Distancia de la fuente
table <- flextable::height(table, height = .20, part='footer')
table <- flextable::hrule(table, rule = "exact", part = 'footer')

AA <- nrow(data)

table <- flextable::bold(table, i=AA)

table <- flextable::bg(table, i=AA, bg="midnightblue", 
                       part="body")

table <- flextable::color(table, i=AA, color="white", 
                       part="body")

return(table)
}
ft <- make.flextable_AV (JJ)
ft

Tabla No2

En esta sección aprenderemos como ajustar el título a nuestra tabla, de acuerdo a nuestros requerimientos.

ft <- make.flextable(Avispas)

ft <- flextable::set_caption(ft, caption= as_paragraph(as_chunk("Titulazo",
                props = fp_text_default(font.family = "Calibri", bold=TRUE, color="darkblue",
                                        font.size = 10))))
ft

Automatización de títulos

Aprenderemos a automatizar títulos de la siguiente manera:

fecha_corte     <- dmy("31-10-2022")
fecha_anterior  <- dmy("30-09-2022")

Fecha_A <- paste0(gsub(".","", str_to_title(as.character(fecha_corte,
                                                    format="%B")),
                                                    fixed=T))

Fecha_B <- paste0(gsub(".","", str_to_title(as.character(fecha_anterior,
                                                    format="%B")),
                                                    fixed=T))

ft <- make.flextable(Avispas)

ft <- flextable::set_caption(ft, caption= 
                               as_paragraph(as_chunk(paste0("Comparación ",Fecha_A,"-",Fecha_B, " ", 2022),props = fp_text_default(font.family = "Calibri", bold=TRUE,
                                        font.size = 10))))
ft

Tabla No3

En esta sección, aplicaremos sangría a distintas filas de nuestra tabla. Para aquello, invocaremos al siguiente comando padding

ag <- flextable(af)
ag <- padding(ag, i=c(2,4,6,8), j=1, padding.left = 15)
ag

Tabla No4

Continuando con la tabla anterior, ajustaremos el ancho de las filas

ab <- make.flextable_Two(af)
ab <- flextable::height(ab,height = 0.8)
ab <- line_spacing(i=c(1,3,5,7),ab,space = 0.30, part= "body")
ab <- line_spacing(i=c(2,4,6),  ab,space = 0.80, part= "body")
ab

Tabla No5

Para evitar que las tablas tengan espacios en la parte superior e inferior de la misma, se deberá aplicar la siguiente rutina.

abl <- make.flextable_Two(af)
abl <- flextable::padding(abl,padding.top = 0, part = "body")%>%
       flextable::padding(padding.bottom  = 0, part = "body")
         

abl