--- title: "Formatting Reports with Named Regions" author: "Stefan Fleck" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{named regions} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: chunk_output_type: console --- ```{r} library(tatoo) ``` # Introduction 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. # Example ```{r, eval = FALSE} wb <- as_workbook(iris[1:5, ]) ``` ![a plain table](plain_table.png) ```{r, eval = FALSE} style_colnames <- openxlsx::createStyle(textDecoration = "bold") walk_regions(wb, "colnames", openxlsx::addStyle, style_colnames) walk_regions(wb, "table", openxlsx::setColWidths, widths = 14) ``` ![a stylish table](plain_table_2.png) # Named region names The names of the named regions associated with a table are constructed from the following elements: * The table_id (`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. * The type of the table, possible values: * row_mashed_table * col_mashed_table * composite_table * table (for a simple data.frame) * The part of the table * header (for Tagged_tables, constructed from title, longtitle, subtitle) * footer (for Tagged_tables) * colnames * multinames (for Composite_tables) * body (The actual values in the table, without colnames) * An 8-character random string to ensure uniqueness of the region name **Examples:** ```{r} show_regions <- function(x){ unique(regions(as_workbook(x))$region) } ``` ```{r} show_regions(mash_table(iris, iris)) show_regions(mash_table(iris, iris, mash_method = "col")) show_regions(comp_table(iris, iris)) show_regions(stack_table(iris, iris)) show_regions(tag_table( iris, tt_meta( table_id = "tab1", title = "a title", footer = "blahblubb") )) ``` # Formatting parts of tables with walk_regions `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). ```{r, results = "hide"} 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) ``` ![a very stylish table](plain_table_3.png)