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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
可以使用JavaScript来操作Word模板生成Word文件。一种常见的方法是使用第三方库,如`docxtemplater`或`officegen`来处理Word文档生成。 首先,你需要安装所选库的依赖项。以`docxtemplater`为例,可以使用以下命令安装: ``` npm install docxtemplater ``` 然后,你可以使用以下代码示例来操作Word模板生成Word文件: ```javascript const fs = require('fs'); const Docxtemplater = require('docxtemplater'); // 读取Word模板文件 const templateContent = fs.readFileSync('template.docx', 'binary'); // 创建一个新的Docxtemplater实例 const doc = new Docxtemplater(); // 加载模板内容 doc.loadZip(new JSZip(templateContent)); // 设置要替换的变量值 const data = { name: 'John Doe', age: 30, address: '123 Main Street', }; // 将变量值应用于模板 doc.setData(data); // 渲染模板内容 doc.render(); // 生成Word文件 const output = doc.getZip().generate({ type: 'nodebuffer' }); // 将文件保存到磁盘 fs.writeFileSync('output.docx', output); ``` 在上述示例中,我们首先使用`fs`模块读取Word模板文件的内容。然后,我们创建一个`Docxtemplater`实例,并加载模板内容。接下来,我们设置要替换的变量值,并将其应用于模板。最后,我们渲染模板内容,并将生成Word文件保存到磁盘。 请注意,这只是一个简单的示例,你可以根据自己的需求进行定制和扩展。另外,还可以使用其他类似的库来完成类似的任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值