Lays a gt table out as cells: the heading, the column spanners, the
column labels, the stub, the row groups, the body, any summary rows, the
footnotes and the source notes, one after another in a single rectangular
block starting at dims.
Usage
wb_add_gt(
wb,
x,
sheet = current_sheet(),
dims = "A1",
numeric = TRUE,
col_widths = "auto",
row_heights = NULL,
ignore_errors = TRUE,
gap = 1L,
features = TRUE,
freeze = FALSE,
...
)Arguments
- wb
A
wbWorkbookobject, as returned byopenxlsx2::wb_workbook().- x
A
gt_tblobject, or agt_groupas returned bygt::gt_group()orgt::gt_split(). A group is written one table after another down the sheet.- sheet
The worksheet to write to. Defaults to the current sheet.
- dims
Cell reference of the top left corner of the table, for example
"B2".- numeric
Write numbers as numbers where the displayed format can be reproduced. Set to
FALSEto write every cell as text.- col_widths
"auto"measures the rendered text and sizes the columns to fit it, a numeric vector sets the widths directly, andNULLleaves them alone. Widths set withgt::cols_width()always win.- row_heights
NULL, the default, leaves the spreadsheet software to size the rows."gt"sets each row from the padding gt would have used, and a numeric vector sets the heights directly. Both also centre the text vertically, since spreadsheet software aligns to the bottom of a cell and gt pads evenly. Rows with wrapped text keep the software's own sizing, which a fixed height would clip.- ignore_errors
Mark text cells whose content looks like a number or a date, so spreadsheet software stops flagging them.
- gap
Blank rows left between the tables of a
gt_group. Ignored for a single table.- features
What to write besides the values.
TRUE, the default, is all of them;FALSEwrites values only. Otherwise a character vector of any of"font","fill","border","numfmt","merge"and"link", so a table that goes wrong in one respect can still be written in every other.- freeze
Freeze panes so the heading and the stub stay in view while scrolling.
TRUEfreezes below the heading and beside the stub, a length-two vectorc(row, col)freezes at a cell of your choosing, andFALSE, the default, leaves the sheet alone.- ...
Currently unused.
Value
The workbook, invisibly. The input workbook is not modified; a
clone is returned, as elsewhere in openxlsx2.
Details
Everything gt applies before rendering is already in place when the cells
are written, because gtxlsx reads the table gt has built rather than
repeating the work: every fmt_*() and sub_*(), the cols_merge_*()
family, text_transform(), data_color(), summary_rows() and the
footnote marks. Styling set with gt::tab_style() and gt::tab_options()
becomes fonts, fills, alignment and borders; markup inside a cell (bold,
italic, superscripts, line breaks) becomes rich text.
Anything gt draws as a picture cannot be written to a cell.
gt::fmt_image() and gt::cols_nanoplot() leave the cell empty,
gt::fmt_icon() and gt::fmt_flag() fall back to their label text, and
gt::fmt_url() keeps the link text but not the hyperlink.
Row striping
A striped table gets a fill on every body row, the striping colour on one
and table.background.color on the next. Spreadsheet software leaves an
unfilled cell transparent, so filling only half the rows would show the banding as
detached blocks rather than a continuous column.
The colour comes from gt, and gt's default is white. On a worksheet with a
coloured background that white will cover the tint under the table. Set
table.background.color to match, or turn striping off, if that matters.
Links
fmt_url() and fmt_email() leave an anchor in the cell, and that becomes
a hyperlink on the cell. The text shown is whatever gt put there.
Numbers versus text
With numeric = TRUE a column is written as numbers whenever a spreadsheet
number format can reproduce exactly what gt displays. $1,234.50 becomes
the value 1234.5 with the format "$"#,##0.00, so the sheet stays
usable for arithmetic. Columns gt has scaled or suffixed (1.2K for
1200) cannot be reproduced that way and stay text; those cells are
marked so spreadsheet software does not flag them as numbers stored as
text.
See also
wb_add_html() for tables that are already HTML, and
gtxlsx_extract() to see the pieces wb_add_gt() works from.
Examples
library(gt)
library(openxlsx2)
tbl <- gt(data.frame(item = c("Cash", "Debt"), amount = c(1204.5, -3910)))
tbl <- fmt_currency(tbl, columns = "amount", decimals = 2)
tbl <- tab_header(tbl, title = "Balance")
wb <- wb_workbook()$add_worksheet()
wb <- wb_add_gt(wb, tbl, dims = "B2")
wb_to_df(wb, col_names = FALSE)
#> B C
#> 2 Balance <NA>
#> 3 item amount
#> 4 Cash 1204.5
#> 5 Debt -3910