Title: | Reporting Tables |
---|---|
Description: | This package is dedicated to convert `rtables` object to tables in use in `pptx` and `docx` files. |
Authors: | Gabriel Becker [ctb], Davide Garolini [aut], Emily de la Rua [aut], Abinaya Yogasekaram [aut], Joe Zhu [aut, cre], F. Hoffmann-La Roche AG [cph, fnd] |
Maintainer: | Joe Zhu <[email protected]> |
License: | Apache License 2.0 | file LICENSE |
Version: | 0.0.1.9008 |
Built: | 2024-11-26 15:25:18 UTC |
Source: | https://github.com/insightsengineering/rtables.officer |
From a table, produce a self-contained word document or attach it to a template word
file (template_file
). This function is based on the tt_to_flextable()
transformer and
the officer
package.
export_as_docx( tt, file, doc_metadata = NULL, titles_as_header = FALSE, footers_as_text = TRUE, template_file = NULL, section_properties = section_properties_default(), ... ) section_properties_default( page_size = c("letter", "A4"), orientation = c("portrait", "landscape") ) margins_potrait() margins_landscape()
export_as_docx( tt, file, doc_metadata = NULL, titles_as_header = FALSE, footers_as_text = TRUE, template_file = NULL, section_properties = section_properties_default(), ... ) section_properties_default( page_size = c("letter", "A4"), orientation = c("portrait", "landscape") ) margins_potrait() margins_landscape()
tt |
( |
file |
( |
doc_metadata |
( |
titles_as_header |
( |
footers_as_text |
( |
template_file |
( |
section_properties |
( |
... |
( |
page_size |
( |
orientation |
( |
section_properties_default()
: Helper function that defines standard portrait properties for tables.
margins_potrait()
: Helper function that defines standard portrait margins for tables.
margins_landscape()
: Helper function that defines standard landscape margins for tables.
export_as_docx()
has few customization options available. If you require specific formats and details,
we suggest that you use tt_to_flextable()
prior to export_as_docx
. Only the titles_as_header
and
footer_as_text
parameters must be re-specified if the table is changed first using tt_to_flextable()
.
lyt <- basic_table() %>% split_cols_by("ARM") %>% analyze(c("AGE", "BMRKR2", "COUNTRY")) tbl <- build_table(lyt, ex_adsl) # See how section_properties_portrait function is built for custom tf <- tempfile(fileext = ".docx") export_as_docx(tbl, file = tf, section_properties = section_properties_default(orientation = "landscape") )
lyt <- basic_table() %>% split_cols_by("ARM") %>% analyze(c("AGE", "BMRKR2", "COUNTRY")) tbl <- build_table(lyt, ex_adsl) # See how section_properties_portrait function is built for custom tf <- tempfile(fileext = ".docx") export_as_docx(tbl, file = tf, section_properties = section_properties_default(orientation = "landscape") )
flextable
from an rtables
tablePrincipally used for export (export_as_docx()
), this function produces a flextable
from an rtables
table. If theme = NULL
, rtables
-like style will be used. Otherwise,
theme_docx_default()
will produce a .docx
-friendly table.
tt_to_flextable( tt, theme = theme_docx_default(), border = flextable::fp_border_default(width = 0.5), indent_size = NULL, titles_as_header = TRUE, bold_titles = TRUE, footers_as_text = FALSE, counts_in_newline = FALSE, paginate = FALSE, fontspec = NULL, lpp = NULL, cpp = NULL, ..., colwidths = NULL, tf_wrap = !is.null(cpp), max_width = cpp, total_page_height = 10, total_page_width = 10, autofit_to_page = TRUE ) theme_docx_default( font = "Arial", font_size = 9, cell_margins = c(word_mm_to_pt(1.9), word_mm_to_pt(1.9), 0, 0), bold = c("header", "content_rows", "label_rows", "top_left"), bold_manual = NULL, border = flextable::fp_border_default(width = 0.5) ) theme_html_default( font = "Courier", font_size = 9, cell_margins = 0.2, remove_internal_borders = "label_rows", border = flextable::fp_border_default(width = 1, color = "black") ) word_mm_to_pt(mm)
tt_to_flextable( tt, theme = theme_docx_default(), border = flextable::fp_border_default(width = 0.5), indent_size = NULL, titles_as_header = TRUE, bold_titles = TRUE, footers_as_text = FALSE, counts_in_newline = FALSE, paginate = FALSE, fontspec = NULL, lpp = NULL, cpp = NULL, ..., colwidths = NULL, tf_wrap = !is.null(cpp), max_width = cpp, total_page_height = 10, total_page_width = 10, autofit_to_page = TRUE ) theme_docx_default( font = "Arial", font_size = 9, cell_margins = c(word_mm_to_pt(1.9), word_mm_to_pt(1.9), 0, 0), bold = c("header", "content_rows", "label_rows", "top_left"), bold_manual = NULL, border = flextable::fp_border_default(width = 0.5) ) theme_html_default( font = "Courier", font_size = 9, cell_margins = 0.2, remove_internal_borders = "label_rows", border = flextable::fp_border_default(width = 1, color = "black") ) word_mm_to_pt(mm)
tt |
( |
theme |
( |
border |
( |
indent_size |
( |
titles_as_header |
( |
bold_titles |
( |
footers_as_text |
( |
counts_in_newline |
( |
paginate |
( |
fontspec |
( |
lpp |
( |
cpp |
( |
... |
( |
colwidths |
( |
tf_wrap |
( |
max_width |
( |
total_page_height |
( |
total_page_width |
( |
autofit_to_page |
( |
font |
( |
font_size |
( |
cell_margins |
( |
bold |
( |
bold_manual |
(named |
remove_internal_borders |
( |
mm |
( |
Themes can also be extended when you need only a minor change from a default style. You can either
add your own theme to the theme call (e.g. c(theme_docx_default(), my_theme)
) or create a new
theme like shown in the examples. Please pay attention to the parameters' inputs as they are relevant
for this to work properly.
Indeed, it is possible to use some hidden values for building your own theme (hence the need of ...
).
In particular, tt_to_flextable
sends in the following variable:
tbl_row_class = rtables::make_row_df(tt)$node_class
. This is ignored if not used in the theme.
See theme_docx_default
for an example on own to retrieve these values and how to use them.
A flextable
object.
theme_docx_default()
: Main theme function for export_as_docx()
.
theme_html_default()
: Theme function for html outputs.
word_mm_to_pt()
: Padding helper functions to transform mm to pt.
Currently cpp
, tf_wrap
, and max_width
are only used in pagination and do not yet have a
clear cooperation with colwidths
and autofit_to_page
. at the moment it is suggested to use the cpp
parameter family cautiously. If issues arise, please communicate with the maintainers or raise an issue.
analysisfun <- function(x, ...) { in_rows( row1 = 5, row2 = c(1, 2), .row_footnotes = list(row1 = "row 1 - row footnote"), .cell_footnotes = list(row2 = "row 2 - cell footnote") ) } lyt <- basic_table( title = "Title says Whaaaat", subtitles = "Oh, ok.", main_footer = "ha HA! Footer!" ) %>% split_cols_by("ARM") %>% analyze("AGE", afun = analysisfun) tbl <- build_table(lyt, ex_adsl) # rtables style tt_to_flextable(tbl, theme = NULL) tt_to_flextable(tbl, theme = theme_docx_default(font_size = 6)) # Example with multiple themes (only extending the docx default!) my_theme <- function(x, ...) { flextable::border_inner(x, part = "body", border = flextable::fp_border_default(width = 0.5)) } flx <- tt_to_flextable(tbl, theme = c(theme_docx_default(), my_theme)) # Custom theme special_bold <- list( "header" = list("i" = 1, "j" = c(1, 3)), "body" = list("i" = c(1, 2), "j" = 1) ) custom_theme <- theme_docx_default( font_size = 10, font = "Brush Script MT", border = flextable::fp_border_default(color = "pink", width = 2), bold = NULL, bold_manual = special_bold ) tt_to_flextable(tbl, border = flextable::fp_border_default(color = "pink", width = 2), theme = custom_theme ) # Extending themes my_theme <- function(font_size = 6) { # here can pass additional arguments for default theme function(flx, ...) { # First apply theme_docx_default flx <- theme_docx_default(font_size = font_size)(flx, ...) # Then apply additional styling flx <- flextable::border_inner(flx, part = "body", border = flextable::fp_border_default(width = 0.5) ) return(flx) } } flx <- tt_to_flextable(tbl, theme = my_theme())
analysisfun <- function(x, ...) { in_rows( row1 = 5, row2 = c(1, 2), .row_footnotes = list(row1 = "row 1 - row footnote"), .cell_footnotes = list(row2 = "row 2 - cell footnote") ) } lyt <- basic_table( title = "Title says Whaaaat", subtitles = "Oh, ok.", main_footer = "ha HA! Footer!" ) %>% split_cols_by("ARM") %>% analyze("AGE", afun = analysisfun) tbl <- build_table(lyt, ex_adsl) # rtables style tt_to_flextable(tbl, theme = NULL) tt_to_flextable(tbl, theme = theme_docx_default(font_size = 6)) # Example with multiple themes (only extending the docx default!) my_theme <- function(x, ...) { flextable::border_inner(x, part = "body", border = flextable::fp_border_default(width = 0.5)) } flx <- tt_to_flextable(tbl, theme = c(theme_docx_default(), my_theme)) # Custom theme special_bold <- list( "header" = list("i" = 1, "j" = c(1, 3)), "body" = list("i" = c(1, 2), "j" = 1) ) custom_theme <- theme_docx_default( font_size = 10, font = "Brush Script MT", border = flextable::fp_border_default(color = "pink", width = 2), bold = NULL, bold_manual = special_bold ) tt_to_flextable(tbl, border = flextable::fp_border_default(color = "pink", width = 2), theme = custom_theme ) # Extending themes my_theme <- function(font_size = 6) { # here can pass additional arguments for default theme function(flx, ...) { # First apply theme_docx_default flx <- theme_docx_default(font_size = font_size)(flx, ...) # Then apply additional styling flx <- flextable::border_inner(flx, part = "body", border = flextable::fp_border_default(width = 0.5) ) return(flx) } } flx <- tt_to_flextable(tbl, theme = my_theme())