使用R语言批量写批文

原理

发展党员的批文有既定的模板。这样在召开党委会集体研究决定后,我们只需要把前期收集的.xlsx表格中的信息,填写到作为模板的word文档中的对应位置即可。

为了方便定位,我们可以在制作模板时,就把要填写的地方做好标记。比如使用关键词name.person(发展对象的姓名)、name.cpc.branch(党支部名称。如果批文下发到党总支或者社区党委,这里为党总支名称或社区党委名称)、serial_num(预审通过后将下发《入党志愿书》,这里为省委统一印制的《入党志愿书》编号)。

package xlsx用于读取.xlsx表格。
package officer用于处理.docx文档。包括读取文档,替换关键词,添加分页符,输出.docx文档。
packagestringr用于文本处理,在标记输出文档顺序的时候。 (如果不标记顺序,合并的文档可能是根据a-z的顺序排列的,而不是表格中的序号。)


准备工作

  • 准备包含批文所需信息的.xlsx表格
  • 准备作为批文模板的.docx文档

set up

setwd("~/.../RwkSpace")

library(xlsx)
library(officer)
library(stringr)

# create dir
if (!dir.exists('output')) {
  dir.create('output')
}

读取.xlsx

调用xlsx package 的 read.xlsx函数 读取.xlsx表格
稍后将把 .xlsx表格中的信息 填写到批文中。

info.tt <- read.xlsx(file = "./2021年第一批发展对象_信息采集.xlsx",
                     sheetIndex = 3, startRow = 2, stringsAsFactors = FALSE
                     ) 

循环替换模板中的文字

#### write word documents ####
for(i in 1:nrow(info.tt)){
  # 读取 模板.docx
  officer_doc <- officer::read_docx(path = "./【模板】预审意见.docx")
  
  # def variable
  name.person <- info.tt$姓名[i]
  name.cpc.branch <- info.tt$批复下发到的党支部[i]
  serial_num <- info.tt$入党志愿书编号[i] %>% as.character()
  
  # 替换
  doc_replaced <- officer_doc %>%
    body_replace_all_text(old_value = "name.person", 
                          new_value = name.person, 
                          only_at_cursor = FALSE
    ) %>%
    body_replace_all_text(old_value = "name.cpc.branch", 
                          new_value = name.cpc.branch, 
                          only_at_cursor = FALSE
    ) %>% 
    body_replace_all_text(old_value = "serial_num", 
                          new_value = serial_num, 
                          only_at_cursor = FALSE
                          )
                          
  # "./output/【张三】预审的意见.docx"
  print(doc_replaced, 
        target = paste0("./output/", i,"【", name.person, "】", "预审的意见.docx")
  )

}

merge all word docx into a single file

为了方便打印 将生成的数个word文档 合并成一个文档 中间用分页符隔开

#### merge all word docx ####
# get ordered
doc.path <- paste0("./output/", 
                   list.files(path = "./output")
)
idx <- doc.path %>% str_extract_all(pattern = "\\d+") %>% unlist() %>% as.numeric() %>% order() 
doc.path <- doc.path[idx]

# merge doc
doc_merge <- officer::read_docx(path = doc.path[1])

for(i in 2:length(doc.path)){
  doc_merge <- doc_merge %>%
    body_add_break() %>% # add a page break into an rdocx object
    body_add_docx(src = doc.path[i]) # add content of a docx into an rdocx object
}


print(doc_merge, 
      target = paste0("./", "【", "All", "】", "预审的意见.docx")
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值