1.npm下载
npm i pizzip docxtemplater xlsx
2.excel模板
3.word模板
4.代码
- // 引入所需模块
- var PizZip = require('pizzip');
- var Docxtemplater = require('docxtemplater');
- var fs = require('fs');
- var path = require('path');
- var xl = require('xlsx');
-
- // 读取并导出Excel文件 ./en.xlsx
- var workbook = xl.readFile("./en.xlsx")
- const sheetNames = workbook.SheetNames; // 返回 ['sheet1', 'sheet2']
-
- // 根据表名获取对应某张表
- const worksheet = workbook.Sheets[sheetNames[0]]; // 获取第一张表
- var dataa = xl.utils.sheet_to_json(worksheet); // 将表转换为JSON对象数组
- // console.log(dataa);
-
- // 处理数据,创建一个新数组,其中包含具有中文名、中文描述和英文描述的对象
- let distdata = []
- for (let i = 0; i < dataa.length; i++) {
- const element = dataa[i];
- let obj = {
- name: element.__EMPTY,// 获取中文名
- chinese: element.__EMPTY_1,// 获取中文描述
- english: element.__EMPTY_2 // 获取英文描述
- }
- distdata.push(obj)
- }
-
- // console.log(distdata)
- // 读取word文件,以二进制文件形式保存
- var content = fs.readFileSync(path.resolve(__dirname, './a1.docx'), 'binary'); // 读取word文件
- // 遍历处理后的数据,为每个对象生成一个word文件
- for (let i = 0; i < distdata.length; i++) {
- // 创建一个新的PizZip对象
- var zip = new PizZip(content);
- var doc = new Docxtemplater(zip);
- // 获取当前遍历的对象
- let ele = distdata[i]
- // 设置填充数据
- doc.setData(
- {
- name: ele.name,
- chinese: ele.chinese,
- english: ele.english
- }
- );
- //渲染数据生成文档
- doc.render()
- // 将文档转换文nodejs能使用的buf
- var buf = doc.getZip().generate({ type: 'nodebuffer' });
- // 导出文档名字/类型
- fs.writeFileSync(path.resolve(__dirname, `./word/${distdata[i].name}.docx`), buf);
- }
5.运行结果 node ./app.js

6.全部内容 zip 包 看资源绑定