R语言officer包批量生成word文档

最近有个工作需要生成100多份word文档,重复劳动伤不起。

找来了 R  package officer 文档,码字、调试3个小时完成任务,应该是不误砍柴工。

程序结构如下:

 具体代码

library(officer)
library(magrittr) # Package `magrittr` makes officer usage easier.
library(ggplot2)

#data<-read.csv("dyl.csv")

data<-read.csv("demo.csv")   #读入数据
author="Joe Baiden"          #自定义签名人


fonts<-function(){
  textfont<-fp_text(
    color = "black",
    font.size = 14,
    bold = FALSE,
    italic = FALSE,
    underlined = FALSE,
    font.family = "仿宋",
    cs.family = NULL,
    eastasia.family = NULL,
    hansi.family = NULL,
    vertical.align = "baseline",
    shading.color = "transparent"
  )
  
  titlefont<-fp_text(
    color = "black",
    font.size = 20,
    bold = TRUE,
    italic = FALSE,
    underlined = FALSE,
    font.family = "黑体",
    cs.family = NULL,
    eastasia.family = NULL,
    hansi.family = NULL,
    vertical.align = "baseline",
    shading.color = "transparent"
  )
  fontlist<-list(textfont,titlefont)
  return (fontlist)
}      #自定义标题和正文字体
autodoc1<-function(name,id,item,cause,date,content){
  
  a_par <- fpar(
    ftext("白宫入住申请", prop = titlefont ),
    fp_p = fp_par(text.align = "center", padding = 5)) 
  
  b_par <- fpar(
    ftext(paste0("申请人姓名:  ",name), prop = textfont ),
    fp_p = fp_par(text.align = "left", padding = 5)) 
  
  c_par <- fpar(
    ftext(paste0("申请项目:  ",item), prop = textfont ),
    fp_p = fp_par(text.align = "left", padding = 5)) 
  
  d_par <- fpar(
    ftext(paste0("申请原因:  ",cause), prop = textfont ),
    fp_p = fp_par(text.align = "left", padding = 5)) 
  e_par <- fpar(
    ftext(paste0("具体描述:本人于", date,"参加美丽国总统选举,", content), prop = textfont ),
    fp_p = fp_par(text.align = "left", padding = 5)) 
  f_par <- fpar(
    ftext(paste0("申请人签字: ",author), prop = textfont ),
    fp_p=fp_par(text.align = "right", padding = 5)) 
  
  my_doc <- read_docx() 
  
  my_doc %>%           #使用magrittr方式一步步添加
    
    body_add_fpar(a_par) %>% 
    body_add_par(value = "", style = "Normal") %>%
    body_add_fpar(b_par) %>% 
    body_add_fpar(c_par) %>%
    body_add_fpar(d_par) %>%   
    body_add_fpar(e_par) %>% 
    body_add_par(value = "", style = "Normal") %>%
    body_add_par(value = "", style = "Normal") %>%
    body_add_par(value = "", style = "Normal") %>%
    body_add_par(value = "", style = "Normal") %>%
    body_add_par(value = "", style = "Normal") %>%
    body_add_par(value = "", style = "Normal") %>%
    body_add_par(value = "", style = "Normal") %>%
    body_add_par(value = "", style = "Normal") %>%
    body_add_fpar(f_par) %>% 
    print(target = paste0(i,"_",name,"_",date,"_",item,".docx"))    #保存文件名
  
}  #编辑文档内容函数


fontlist<-fonts()           #生成字体list

for (i in 1:nrow(data)) {
  name=data[i,"name"]
  id=data[i,"id"]
  item=data[i,"item"]
  cause=data[i,"cause"]
  date=data[i,"date"]
  content=data[i,"content"]
  titlefont=fontlist[[2]]
  textfont=fontlist[[1]]
  autodoc1(name,id,item,cause,date,content)
}   #逐行将内容转为word文档

 word文档效果图:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值