Word 指定模板指定位置数据插入

应用场景:房贷 - 收入证明的开具

需要进行住房贷款的单位员工进行收入证明的开具,收入证明需要使用其公司公章,故而该收入证明文件有固定的格式样式,人力资源进行审核,领导审批方可于公章管理部门进行证明文件的公章加盖
确定开发环境,用户内网使用的办公软件(office 或 WPS)

以客户内网使用 WPS 为例:

获取数据

员工自己发起申请,人资登录系统进行所有员工申请单 Excel 导出,本地处理从另一数据表中获取员工工资
因内网使用 WPS,仅能使用 padas 进行数据处理
#获取对应的员工姓名 name,工号 number,工资 money,身份证号 name_number,住址 address,时间(大写的中文)date_name

Word 模板文件复制到指定文件夹下

self.gv_1 = r'E:\data'
import os
def get_table_load(): 
    load = self.gv_1
    list = os.listdir(load)
    table_load = 0
    for data in list:
        if '员工收入证明文件申请' in data:
        table_load= os.path.join(load,data)
    return table_load
table_load = get_table_load()

word 文件路径获取, 已新建并存放到指定文件夹下

import os,shutil
def get_load():
    load = os.path.join(self.gv_1,'证明文件')
    wd_load = os.path.join(load,str(name+'_'+number+'.docx'))
    pdf_load = os.path.join(load,str(name+'_'+number+'.pdf'))
    #判断该文件是否存在
    if os.path.exists(wd_load):
        os.remove(wd_load)
    shutil.copy(table_load,wd_load)
    return wd_load,pdf_load
wd_load,pdf_load = get_load()

Word 指定位置数据插入, 用唯一值替换模板中需要替换的数据

def get_write_wd(wordpath,date_name):
    #获取需要替换的特征值及数据
    old_address = '111'
    new_address = address
    old_name = '222'
    new_name = name
    new_name_number = name_number
    old_name_number = '333'
    new_money = money
    old_money = '444'
    new_date = date_name
    old_date = '555'
    #获取接口
    word = Dispatch('Word.Application')
    #判断该Word是否存在
    if os.path.exists(wordpath):
        # 获取文本对象
        doc = word.Documents.Open(wordpath)
        #获取全部数据对象
        word.Selection.Find.ClearFormatting()
        
        word.Selection.Find.Replacement.ClearFormatting()
        #查找特征值替换
        word.Selection.Find.Execute(old_address,False,False,False,Fasle,Fasle,True,1,True,new_address,2)
        word.Selection.Find.Execute(old_name,False,False,False,Fasle,Fasle,True,1,True,new_name,2)
        word.Selection.Find.Execute(old_name_number,False,False,False,Fasle,Fasle,True,1,True,new_name_number,2)
        word.Selection.Find.Execute(old_money,False,False,False,Fasle,Fasle,True,1,True,new_money,2)
        word.Selection.Find.Execute(old_date,False,False,False,Fasle,Fasle,True,1,True,new_date2)
        doc.Close()
    word.Quit()
get_write_wd(wd_load,date_name)