node.js提取excel中的信息填充到word文件,批量生成合同

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 包 看资源绑定

相关推荐
shmily麻瓜小菜鸡14 小时前
TDD(测试驱动开发)详解
开发语言·javascript·typescript·node.js·ecmascript
半生过往16 小时前
Node.js 多版本管理完全指南
node.js
梦帮科技1 天前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
BreezeJiang2 天前
别把 WebSocket 当成一门新协议学:搞懂"借 HTTP 握手",双端 Demo 和跨域就都通了
websocket·node.js
65岁退休Coder2 天前
把 Agent 框架拆开:PI 开发生产级 Harness
后端·node.js·agent
65岁退休Coder2 天前
PI Agent 开发一个生产级 Harness
后端·node.js·agent
szephyr2 天前
WebSocket 实战:心跳、断线重连、鉴权,一次讲清
前端·websocket·node.js·长连接·实时通信
秋秋小事2 天前
node postgreSQL的select与include
node.js
ID34610744202 天前
【课程设计】基于Spring Boot+Vue的游戏账号租赁系统的设计与实现-计算机毕设 附源码50345
javascript·vue.js·spring boot·python·node.js·php·课程设计
柚yuzumi2 天前
彻底搞懂 JavaScript 类型转换:显式转换、隐式转换与 ToPrimitive
前端·javascript·node.js