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

问题描述 投票:1回答:2

我的目标是将重复的部分添加到.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与%>%运算符连接起来而产生的,但我还没有找到解决方法。有没有其他人遇到类似的问题,并制定出一个解决方案?

谢谢。

r loops add docx officer
2个回答
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")  

0
投票

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

if(length(sector_down_list)>0){
    for(this_sector in sector_down_list){
        mydoc<-body_add_par(mydoc,this_sector,style="Bulleted List")
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.