R语言:使用ReporteRs循环生成单份患者信息docx文档求助
如何用ReporteRs包生成包含所有患者信息的单一docx文档?
我懂你现在的困扰——原来的循环每次都会新建一个docx对象并立即写入文件,所以每个患者都生成了独立的文档。要改成生成包含所有患者信息的单一文档,只需要调整代码结构,把文档初始化和最终保存的步骤移到循环外面就行,具体修改如下:
修改后的完整代码
# 读取患者数据 dfY2 <- read.table("file.txt", header = TRUE) # 初始化docx文档(只执行一次,基于模板创建) doc <- docx("Template.docx") # 循环遍历每个患者,将信息依次添加到同一个文档中 for(i in 1:nrow(dfY2)) { # 定义标题和患者信息段落 my_title <- pot('Exam', textProperties(font.weight = "bold", font.size = 12, font.family = "Times New Roman")) row1 <- pot("Surname and Name", textProperties(font.weight="bold")) + " " + pot(dfY2[i,1]) + " " + pot(dfY2[i,2]) + " " + pot("Born", textProperties(font.weight="bold")) + pot(dfY2[i,3]) row2 <- pot("SubjectID", textProperties(font.weight="bold")) + " " + pot(dfY2[i,4]) + pot("Place", textProperties(font.weight="bold")) + " " + pot(dfY2[i,5]) # 将当前患者的内容追加到文档中 doc <- doc %>% addParagraph(my_title, par.properties = parProperties(text.align = "center")) %>% addParagraph(c("")) %>% # 添加空行分隔标题和内容 addParagraph(row1) %>% addParagraph(row2) %>% addParagraph(c("")) # 添加空行分隔不同患者的信息块,提升可读性 } # 所有患者信息添加完成后,统一写入到单一docx文件 writeDoc(doc, file = "all_patients_output.docx")
关键改动说明
- 文档初始化移到循环外:只在循环开始前创建一次
docx对象,后续所有患者的内容都追加到这个对象里,而不是每次新建。 - 循环内仅做内容追加:每次迭代只把当前患者的段落添加到已有的文档中,不再调用
writeDoc。 - 统一生成最终文件:等所有患者的信息都添加完毕后,再调用一次
writeDoc,生成包含所有内容的单一文档。 - 额外添加的空行可以让不同患者的信息块之间更清晰,你可以根据实际需求调整是否保留。
内容的提问来源于stack exchange,提问作者MicheleQuail
相关产品推荐
相关产品推荐

