使用r包' flextable'

时间:2018-03-07 10:59:41

标签: r dataframe export document

我正在尝试导出两个(flex)表 同一个文件。我在这里:

df1 <- data.frame(a = 1:3, b = 1:3)
df2 <- data.frame(c = 11:13, d = 11:13)

library(flextable)
df1_ft <- regulartable(df1)
df2_ft <- regulartable(df2)

library(officer)
word_export <- read_docx()
word_export <- body_add_flextable(word_export, df1_ft)
word_export <- body_add_flextable(word_export, df2_ft)
print(word_export, 'try.docx')

然而,结果是包含两个表的单个表。  知道如何一个接一个地添加两个表吗?

2 个答案:

答案 0 :(得分:2)

这两个表一个接一个地输出到Word,因为它们之间没有换行符,所以它们显示为一个。最简单的解决方案是在它们之间放置一个带有空文本的段落:

word_export <- read_docx()
body_add_flextable(word_export, df1_ft)
body_add_par(word_export, value = "")
body_add_flextable(word_export, df2_ft)
print(word_export, 'try.docx')

enter image description here

您还可以看到,您不需要将每个body_add_*行的输出重复分配回word_export文件 - 每次调用都会直接更新Word文件。

答案 1 :(得分:1)

你可以尝试

library(flextable)
library(tidyverse)
library(officer)
# write function
write_word_table <- function(var, doc){
  doc %>%
    body_add_flextable(var) %>% 
    body_add_break() }

# list of tables and the doc
my_list <- list(df1_ft <- regulartable(df1),
              df2_ft <- regulartable(df2))
my_doc <- read_docx()

# use walk (the invisible function of map) to include all tables in one doc
walk(my_list, write_word_table, my_doc) 
print(my_doc, target = "c:/Users/tremmel/Desktop/Doc1.docx") %>% invisible()