You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:让标题和源注在分页后每页重复

默认情况下,文档级的标题和源注只会在第一页/最后一页显示。要实现每页重复,必须将它们整合为表格的表头/表尾行,然后开启重复功能:

  1. 标题重复:用方式B将标题添加为表头顶部行后,开启表头重复即可:
tbl <- tbl %>%
  set_table_properties(repeat_header = TRUE) # 让整个表头(含标题行)每页重复
  1. 源注重复:把源注添加为表格的表尾行,再开启表尾重复:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:03:06