如何修改flextable默认字体?求替代ReporteRs-default-font的设置方法
我来帮你梳理下这个问题的解决方案:
1. flextable是否会调用Word文档的特定样式?
简单说:不会。flextable有一套独立的样式系统,默认情况下不会自动继承你用officer设置的Word文档自定义样式或默认字体(比如Calibri),它的默认字体是Arial,这就是为什么你看到单元格始终显示Arial的原因。
2. 修改flextable字体的方法
有几种灵活的方式可以调整字体,从全局设置到单个元素的自定义都覆盖到:
全局默认字体设置(推荐)
如果你希望所有新建的flextable都使用Calibri,可以用set_flextable_defaults()来全局配置,这就是你提到的options("ReporteRs-default-font")的完美替代方案:
library(flextable) # 全局设置默认字体为Calibri set_flextable_defaults(font.family = "Calibri")
之后你创建的任何flextable都会默认使用这个字体,不用每次重复设置。
针对单个flextable设置
如果只想修改某一个表格的字体,可以用font()函数,指定需要修改的部分(表头、正文或全部):
# 创建示例表格 my_table <- flextable(mtcars[1:3, 1:4]) # 给所有部分(表头+正文)设置Calibri字体 my_table <- font(my_table, part = "all", fontname = "Calibri")
你也可以精准控制特定单元格、行或列:
# 仅给第一列设置字体 my_table <- font(my_table, j = 1, fontname = "Calibri") # 给第2-3行的正文设置字体 my_table <- font(my_table, i = 2:3, part = "body", fontname = "Calibri")
结合officer的文档样式(进阶)
如果你想让flextable和officer定义的Word段落样式对齐,可以先在officer中定义样式,然后用flextable::style()函数将表格元素关联到该样式,确保样式里的字体是Calibri即可:
library(officer) # 创建Word文档对象并定义自定义正文样式 doc <- read_docx() %>% add_style( style_name = "MyCustomStyle", base_style = "Normal", font_name = "Calibri", font_size = 11 ) # 创建表格并应用自定义样式 my_table <- flextable(mtcars[1:3, 1:4]) %>% style(part = "body", pr_t = fp_text(font.size = 11, font.family = "Calibri")) # 将表格插入文档 doc <- doc %>% body_add_flextable(my_table) # 保存文档 print(doc, target = "test.docx")
3. 关于ReporteRs-default-font的替代
正如上面提到的,ReporteRs包已经被flextable和officer取代,对应的全局字体设置就是set_flextable_defaults(font.family = "你的字体"),完全可以替代原来的options设置。
最后提醒下:确保你使用的字体(比如Calibri)在你的系统中是可用的,避免出现字体缺失导致的 fallback 问题。
内容的提问来源于stack exchange,提问作者Rich Tyler




