0

我的目标是将重复的部分添加到 .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 的连续调用,但我还没有找到解决方法。有没有其他人遇到过类似的问题并制定了解决方案?

谢谢。

4

2 回答 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")  
于 2018-09-11T11:03:50.200 回答
0

当然可以使用 for 循环将段落添加到文档中。这是我发现在官员中做项目符号列表的唯一方法。这段代码适用于我从扇区向下列表的元素中创建一个列表

if(length(sector_down_list)>0){
    for(this_sector in sector_down_list){
        mydoc<-body_add_par(mydoc,this_sector,style="Bulleted List")
    }
}
于 2018-04-28T01:02:44.507 回答