Quarto渲染docx时flextable显示R输出而非表格的解决问询
问题:渲染docx时flextable显示为R输出而非表格
我编写了一段生成复杂flextable的代码,在Markdown中可正常预览表格;但将文档渲染为docx格式时,未显示预期表格,而是出现了如下R输出信息:
a flextable object. col_keys: `Reviewer`, `Book`, `Date`, `Index` header has 6 row(s) body has 1 row(s) original dataset sample: Final Reviewer Book Date Index 1 Mr. T 12-34-5678 2022-12-31 BUS-I-NESS321 NULL
生成flextable的代码如下:
library(dplyr) library(tibble) library(flextable) author = "H. Smith" title = "A plan for saving the day" tibble(Reviewer = "Mr. T", Book = "12-34-5678", Date = "2022-12-31", Index = "BUS-I-NESS321") %>% flextable() %>% add_header_lines(paste(author, collapse = ", ")) %>% add_header_lines("Author(s)") %>% add_header_lines(title) %>% add_header_lines("Title") %>% add_header_lines("Super Official Report\nAcme Inc.") %>% theme_box() %>% bg(c(2, 4, 6), part = "header", bg = "grey80") %>% italic(c(2, 4, 6), part = "header") %>% align(1, align = "center", part = "header") %>% align(4, 4, align = "center", part = "header") %>% # doesn't work :() line_spacing(i = 1, space = 2, part = "header") %>% set_table_properties(layout = "autofit", width = .8) %>% print()
预期的表格效果:
原因与解决方法
问题原因
代码末尾的print()函数是核心问题:
- 在R Markdown渲染docx时,调用
print(flextable)会输出该对象的文本描述信息,而非触发表格的渲染逻辑。 - flextable在R Markdown环境中默认支持自动渲染,无需手动调用
print()。 - 输出里的
NULL是print()函数的返回值。
解决步骤
直接删除代码末尾的print()调用,让flextable对象作为代码块的最终输出即可。修改后的代码如下:
library(dplyr) library(tibble) library(flextable) author = "H. Smith" title = "A plan for saving the day" tibble(Reviewer = "Mr. T", Book = "12-34-5678", Date = "2022-12-31", Index = "BUS-I-NESS321") %>% flextable() %>% add_header_lines(paste(author, collapse = ", ")) %>% add_header_lines("Author(s)") %>% add_header_lines(title) %>% add_header_lines("Title") %>% add_header_lines("Super Official Report\nAcme Inc.") %>% theme_box() %>% bg(c(2, 4, 6), part = "header", bg = "grey80") %>% italic(c(2, 4, 6), part = "header") %>% align(1, align = "center", part = "header") %>% align(4, 4, align = "center", part = "header") %>% # doesn't work :() line_spacing(i = 1, space = 2, part = "header") %>% set_table_properties(layout = "autofit", width = .8)
修改后重新渲染docx文档,就能得到和Markdown预览一致的表格效果。
内容的提问来源于stack exchange,提问作者wdkrnls
相关产品推荐
相关产品推荐

