node 通过模板批量生成word合同

这几天一个朋友需要处理公司的很多合同找我帮忙,闲暇的时候给帮他研究了一下,批量处理解放她的双手。因为我是一个前端开发,会一些node 这里就有node进行开发。

这里需要用到 pizzip docxtemplater node-xlsx 依赖包,可以在官网查看!!!

上代码前,先说下逻辑处理流程

首先编辑模板,在js中读取,并对模板数据进行压缩

同时再获xlsx数据,对xlsx数据行一些处理

之后通过Docxtemplater生成模板文档,对模板文档进行赋值

并渲染出新的文档,将文档转换文nodejs能使用的buf

最后输出文档

流程梳理好了,那我们开始上代码

第1步.先对我们的word模板进行编辑,如下:

 第2步.然后就可以对word进行读取并进行压缩了,这里读取的文件是二进制形式

var content = fs.readFileSync(path.resolve(__dirname, './合同模板.docx'), 'binary');
var zip = new PizZip(content);

第3步.读取xlsx的数据,并将数据赋值给data

注:cellDates读取的是xlsx时间格式,可以按照需要进行格式编辑

const mysql = nodeXlsx.parse("./mysql.xlsx",{ cellDates: true})
var data = mysql[0].data

第4步.接下来就是将读取的二进制数据生成模板文档

var doc = new Docxtemplater(zip);

第5步.然后就是对生成的模板进行赋值了,需要注意的是这里赋值的参数要与word中{}参数一致

doc.setData({
        name: e[0],
        stime: formatDate(e[3]),
        etime:formatDate(e[4]),
        end: formatDate(e[3])
    });

第6步.因为xlsx获取的是时间格式所以我们要多时间进行一些处理

function formatDate(numb) {
    let time = new Date(numb)
    let year = time.getFullYear() + ''
    let month = time.getMonth() +1<10?'0'+(time.getMonth() +1):time.getMonth() +1+''
    let date = time.getDate()<10?'0'+time.getDate():time.getDate() + ''
    return year + "/" + month + "/" + date
}

第7步.对填充后的数据进行渲染

 doc.render()

第8步.将文档转换成nodejs能使用的buf

var buf = doc.getZip().generate({ type: 'nodebuffer' });

第9步.最后就是进行输出文件了

fs.writeFileSync(path.resolve(__dirname, `./word/${e[1]}.docx`), buf);

到这一步已经全部流程结束了,但是前面说了,我们是批量合同生成,所以我们要有一步就是将4,5,6,7,8,9写在一个函数里并进行循环遍历

data.forEach(res => {
    addWord(res)
})

到这里就是完整的步骤了。

很高兴在这里分享给大家文档,这也是第一次写文档,有写的不好的地方还望多多包涵!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值