使用“officer”导出列列表中的所有元素
Exporting all elements in column list using `officer`
我正在处理一份报告,为此我必须将大量相似的数据框导出到 Word 中漂亮的表格中。我设法通过使用 purrr
().
生成 flextable
对象的列列表来取得第一位
现在我想将所有生成的表格写入单个 word 文档,对于单个 flextable
对象可以使用以下过程完成:
library(tidyverse)
library(flextable)
library(officer)
# Basic data frame
df <- data.frame(school = c("A", "B", "A", "B", "A", "B"),
students = c(round(runif(6, 1, 10), 0)),
grade = c(1, 1, 2, 2, 3, 3))
# Generating column list containing flextable objects
list <- df %>%
group_by(school) %>%
nest() %>%
mutate(ftables = map(data, flextable))
# Exporting single flextable object into Word
read_docx() %>% body_add_flextable(list$ftables[[2]]) %>% print("path")
我显然想避免对 ftables
中的所有行执行此操作,重要的是,所有表格都应连续写入同一个 Word 文档。
我玩弄了 purrr
函数和编写循环,但最远的是我将表格写入单独的 Word 文档。
你可以试试
my_doc <- read_docx()
for(i in seq_along(list1$ftables)){
my_doc <- body_add_flextable(my_doc,list1$ftables[[i]]) %>%
body_add_break()
}
print(my_doc, target = "Doc.docx") %>% invisible()
提示,不要使用函数名来保存对象。因此,我将 list
重命名为 list1
。这个想法是使用循环并通过添加分页符始终保存到同一个文档。
或尝试 purrr
解决方案:
# build a function to write a function
write_word_table <- function(var, doc){
doc %>%
body_add_flextable(var) %>%
body_add_break() }
my_doc <- read_docx()
# use walk (the invisible function of map) to include all tables in one doc
walk(list1$ftables, write_word_table, my_doc)
print(my_doc, target = "Doc1.docx") %>% invisible()
我正在处理一份报告,为此我必须将大量相似的数据框导出到 Word 中漂亮的表格中。我设法通过使用 purrr
(
flextable
对象的列列表来取得第一位
现在我想将所有生成的表格写入单个 word 文档,对于单个 flextable
对象可以使用以下过程完成:
library(tidyverse)
library(flextable)
library(officer)
# Basic data frame
df <- data.frame(school = c("A", "B", "A", "B", "A", "B"),
students = c(round(runif(6, 1, 10), 0)),
grade = c(1, 1, 2, 2, 3, 3))
# Generating column list containing flextable objects
list <- df %>%
group_by(school) %>%
nest() %>%
mutate(ftables = map(data, flextable))
# Exporting single flextable object into Word
read_docx() %>% body_add_flextable(list$ftables[[2]]) %>% print("path")
我显然想避免对 ftables
中的所有行执行此操作,重要的是,所有表格都应连续写入同一个 Word 文档。
我玩弄了 purrr
函数和编写循环,但最远的是我将表格写入单独的 Word 文档。
你可以试试
my_doc <- read_docx()
for(i in seq_along(list1$ftables)){
my_doc <- body_add_flextable(my_doc,list1$ftables[[i]]) %>%
body_add_break()
}
print(my_doc, target = "Doc.docx") %>% invisible()
提示,不要使用函数名来保存对象。因此,我将 list
重命名为 list1
。这个想法是使用循环并通过添加分页符始终保存到同一个文档。
或尝试 purrr
解决方案:
# build a function to write a function
write_word_table <- function(var, doc){
doc %>%
body_add_flextable(var) %>%
body_add_break() }
my_doc <- read_docx()
# use walk (the invisible function of map) to include all tables in one doc
walk(list1$ftables, write_word_table, my_doc)
print(my_doc, target = "Doc1.docx") %>% invisible()