library(tatoo)
As of v.1.1.0 tatoo assigns named regions when writing .xlsx files. tatoo can use these named regions to painlessly apply formatting to tables inside Excel workbooks in bulk.
wb <- as_workbook(iris[1:5, ])
style_colnames <- openxlsx::createStyle(textDecoration = "bold")
walk_regions(wb, "colnames", openxlsx::addStyle, style_colnames)
walk_regions(wb, "table", openxlsx::setColWidths, widths = 14)
The names of the named regions associated with a table are constructed from the following elements:
table_id<-()
), if the table has one. A table id can be an arbitrary character string, but save yourself some trouble and don’t use special characters.Examples:
show_regions <- function(x){
unique(regions(as_workbook(x))$region)
}
show_regions(mash_table(iris, iris))
## [1] "row_mashed_table_4C60nkOI"
## [2] "row_mashed_table_colnames_OjPIjVua"
## [3] "row_mashed_table_body_UZlqbZnr"
show_regions(mash_table(iris, iris, mash_method = "col"))
## [1] "col_mashed_table_0qRGSHrE"
## [2] "col_mashed_table_colnames_VFYxT95c"
## [3] "col_mashed_table_body_uw6BPuSw"
show_regions(comp_table(iris, iris))
## [1] "composite_table_multinames_Rbyj5EhU"
## [2] "composite_table_I2KeppiF"
## [3] "composite_table_colnames_TRAl9Aft"
## [4] "composite_table_body_3SHBBNtU"
show_regions(stack_table(iris, iris))
## [1] "stacked_table_Hqg8ZSx2" "stacked_table_colnames_hMgK2Xpx"
## [3] "stacked_table_body_pshmTUZC" "stacked_table_FFa8BFEC"
## [5] "stacked_table_colnames_uLWp6NfG" "stacked_table_body_zBlS9aS5"
show_regions(tag_table(
iris,
tt_meta(
table_id = "tab1",
title = "a title",
footer = "blahblubb")
))
## [1] "tab1_header_9qWWD86l" "tab1_table_hLlVjHtT"
## [3] "tab1_table_colnames_WUjvnMn8" "tab1_table_body_MuLCtApn"
## [5] "tab1_footer_96cJNpVM"
walk_regions()
is a way to apply formatting to Workbook regions. The syntax is inspired by purrr::walk()
. walk_regions()
takes the following arguments:
.wb
an openxlsx::Workbook.pattern
A regex filter pattern for named region names (passed on to grep()
). If you don’t know regex, you will usually be fine just entering the part of the string you want to match..fun
A function with the formal arguments wb
, sheet
and either rows
, cols
, or both. Some useful functions to use are openxlsx::addStyle()
, openxlsx::addFilter()
, openxlsx::setRowHeights()
and openxlsx::setColWidths()
, but you can also write your own functions, as long as they have the correct arguments....
passed on as additional arguments to .fun
Examples
The following examples show how walk_regions()
can be used to format column names, table captions (headers) and the values inside a table (body).
x <- mash_table(
iris[1:2, ],
iris[1:2, ],
meta = tt_meta(table_id = "iris", title = "example table")
)
wb <- as_workbook(x)
style_iris <- openxlsx::createStyle(fgFill = "pink")
style_header <- openxlsx::createStyle(textDecoration = "italic")
style_colnames <- openxlsx::createStyle(textDecoration = "bold", valign = "top")
style_body <- openxlsx::createStyle(textRotation = 10)
walk_regions(wb, "iris", openxlsx::addStyle, style = style_iris)
walk_regions(wb, "header", openxlsx::addStyle, style = style_header, stack = TRUE)
walk_regions(wb, "colnames", openxlsx::addStyle, style = style_colnames, stack = TRUE)
walk_regions(wb, "body", openxlsx::addStyle, style = style_body, stack = TRUE)
# You can also use functions that have *either* the rows or cols argument,
# so the following works:
walk_regions(wb, "table", openxlsx::setColWidths, widths = 14)
walk_regions(wb, "colnames", openxlsx::setRowHeights, heights = 34)