R Markdown批量生成Word报告时如何传入双参数生成同名员工分地区独立报告
批量生成员工Word报告修正方案
原有代码存在3个会导致生成结果错误的问题:
- 遍历逻辑仅以员工姓名为拆分维度,没有将「姓名+所属国家」作为员工唯一标识,跨国家同名员工的报告会被覆盖
- 渲染传参仅传入员工姓名字段,缺失国家参数,模板中国家字段无法正常渲染
- 模板未根据传入参数过滤匹配对应员工的单行数据,会直接将全量数据集内容填入单份报告
修正后的R渲染脚本
将遍历单元替换为去重后的「姓名-国家」组合,渲染时同时传入两个参数,输出文件名追加国家标识避免重名覆盖:
# 正确构造源数据框 mydata <- data.frame( id = 1:5, employee = c("John", "John", "Mary", "Andy", "Andy"), country = c("Italy", "UK", "USA", "Germany", "USA"), val1 = c(2, 5, 2, 5, 7), val2 = c(4, 6, 3, 6, 8), val3 = c(5, 8, 6, 7, 9) ) # 提取所有不重复的员工+国家组合作为遍历单元 iter_pairs <- unique(mydata[, c("employee", "country")]) # 逐组渲染报告 apply(iter_pairs, 1, function(row) { emp <- row[["employee"]] ctry <- row[["country"]] rmarkdown::render( input = "template.Rmd", output_file = paste0("Employee-", emp, "-", ctry, ".docx"), params = list(employee = emp, country = ctry) ) })
修正后的R Markdown模板(template.Rmd)
模板初始化阶段先过滤当前报告对应的唯一员工数据,再渲染正文内容,避免数据错位:
--- title: "员工工作报告" author: "Rita" date: "`r Sys.Date()`" output: word_document params: employee: NULL country: NULL --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE) # 匹配当前报告对应的员工单行数据 emp_data <- subset(mydata, employee == params$employee & country == params$country)
所属国家:r params$country
员工姓名:r params$employee
cat(sprintf( "%s分公司员工%s,累计对接%s位客户,累计服务时长%s小时。", emp_data$country, emp_data$employee, emp_data$val1, emp_data$val2 ))
内容的提问来源于stack exchange,提问作者akang
相关产品推荐
相关产品推荐

