通过循环将内容添加到.docx?

时间:2018-04-08 14:06:15

标签: r loops add docx officer

我的目标是将重复的部分添加到.docx文件中,通过从数据框中提取值来更改连续部分中的值。使用https://cran.r-project.org/web/packages/officer/vignettes/word.html处的示例代码,我已经能够添加一个部分,但我一直无法弄清楚如何使这个代码在循环中工作。

这是一个最小的例子:

 library(officer)
 library(magrittr)

lastRow <- 10

my_doc <- read_docx()  %>%
for(rowNum in 1:lastRow){
  body_add_par("ID: ") %>%
    if(rowNum < lastRow){
      slip_in_text(paste("ID:", rowNum)) %>%
    }else{
      slip_in_text(paste("ID:", rowNum))
}
print(my_doc, target = "sample.docx")

以下是我在控制台中看到的错误消息:

Error: unexpected '}' in:
"      slip_in_text(paste("ID:", rowNum)) %>%
    }"
>       slip_in_text(paste("ID:", rowNum))
Error in x$default_styles : $ operator is invalid for atomic vectors
> }
Error: unexpected '}' in "}"

似乎很明显,问题是通过将连续调用body_add_par与%&gt;%运算符连接起来而产生的,但我还没有找到解决方法。有没有其他人遇到类似的问题并制定出解决方案?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以删除最外面的%>%,并在循环中简单地使用赋值和管道运算符的组合:

library(officer)
library(magrittr)

lastRow <- 10

my_doc <- read_docx() 
for(rowNum in 1:lastRow) {
  my_doc <- my_doc %>% body_add_par("ID: ") %>% slip_in_text(paste("ID:", rowNum))
}

print(my_doc, target = "sample.docx")  

答案 1 :(得分:0)

当然可以使用for循环向doc添加段落。这是我发现在军官中做项目符号列表的唯一方法。 这段代码可以让我从sector_down_list

的元素中创建一个列表
api/json?pretty=true&depth=1 or 2 or 3