gtsummary对象通过officer/flextable导出RTF时的标题左对齐与分页重复标题/源注实现问询
gtsummary对象通过officer/flextable导出RTF时的标题左对齐与分页重复标题/源注实现问询
针对你提出的两个核心问题,我整理了结合flextable和gtsummary的具体解决方案,直接适配你的原代码逻辑:
问题1:让modify_caption的标题在RTF中左对齐
gtsummary生成的表格转成flextable后,默认的文档级标题是居中对齐的。你可以根据需求选择两种实现方式:
方式A:保留独立标题并左对齐
如果希望标题还是作为表格上方的独立文本(不属于表格结构的一部分),可以在转成flextable后覆盖原标题,同时设置段落左对齐:
tbl <- tbl %>% as_flex_table() %>% set_caption( caption = "Table 15.3: 1 AE by SOC/PT", fp_p = fp_par(text.align = "left") # 关键:设置左对齐格式 )
方式B:将标题整合为表格表头的一部分(同时适配分页重复)
如果还要实现标题分页重复,更推荐把标题做成表格的顶部表头行,这样后续开启表头重复时标题会自动跟着重复,同时直接设置该行左对齐:
tbl <- tbl %>% as_flex_table() %>% # 添加跨所有列的标题行 add_header_top(values = "Table 15.3: 1 AE by SOC/PT", colwidths = ncol(.)) %>% # 针对新增的标题行设置左对齐 align(align = "left", part = "header", i = 1)
问题2:让标题和源注在分页后每页重复
默认情况下,文档级的标题和源注只会在第一页/最后一页显示。要实现每页重复,必须将它们整合为表格的表头/表尾行,然后开启重复功能:
- 标题重复:用方式B将标题添加为表头顶部行后,开启表头重复即可:
tbl <- tbl %>% set_table_properties(repeat_header = TRUE) # 让整个表头(含标题行)每页重复
- 源注重复:把源注添加为表格的表尾行,再开启表尾重复:
tbl <- tbl %>% # 添加跨所有列的源注行 add_footer_bottom(values = "xxxx is defined as xxxx.", colwidths = ncol(.)) %>% # 设置源注行左对齐 align(align = "left", part = "footer", i = 1) %>% # 让表尾行每页重复 set_table_properties(repeat_footer = TRUE)
整合后的完整可运行代码
把以上修改整合到你的原代码中,最终版本如下:
# Load libraries & data ------------------------------------- library(dplyr) library(gtsummary) library(officer) library(flextable) library(pharmaverseadam) adsl <- pharmaverseadam::adsl adae <- pharmaverseadam::adae # Pre-processing -------------------------------------------- adae <- adae %>% dplyr::filter( # safety population SAFFL == "Y" ) # 生成层级表格 tbl <- adae |> tbl_hierarchical( variables = c(AESOC, AEDECOD), by = ARM, id = USUBJID, denominator = adsl, overall_row = TRUE, label = "..ard_hierarchical_overall.." ~ "Any Adverse Events" ) # 定义标题和源注文本(统一管理更方便) caption_text <- "Table 15.3: 1 AE by SOC/PT" source_note_text <- "xxxx is defined as xxxx." # 转成flextable并处理格式与分页重复 tbl <- tbl %>% as_flex_table() %>% # 1. 添加标题行并左对齐 add_header_top(values = caption_text, colwidths = ncol(.)) %>% align(align = "left", part = "header", i = 1) %>% # 2. 添加源注行并左对齐 add_footer_bottom(values = source_note_text, colwidths = ncol(.)) %>% align(align = "left", part = "footer", i = 1) %>% # 3. 开启表头、表尾的每页重复 set_table_properties( layout = "autofit", repeat_header = TRUE, repeat_footer = TRUE ) %>% # 可选:美化表格边框样式 theme_booktabs() # 页面设置与RTF导出 sect_properties <- prop_section( type = "nextPage", page_size = page_size( orient = "landscape", width = 12, height = 11.7 ), page_margins = page_mar() ) save_as_rtf(tbl, path = 'tbl.rtf', pr_section = sect_properties)
小提示
ncol(.)会自动读取当前表格的列数,确保标题/源注行跨所有列显示,无需手动指定列数。- 如果你的原表格已有多层表头,
add_header_top()会在最顶部新增标题行,i=1精准指代这个新增行,避免影响原有表头的对齐设置。
内容来源于stack exchange
相关产品推荐
相关产品推荐

