最近有个工作需要生成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文档效果图: