使用docxtemplater进行Word文档的自动填充

  最近给其他部门做了个简单的脚本要把一堆数据填充到word报告里。模板固定的都好说。用 docxtemplater 就行。

  使用 npm install docxtemplater 直接下载即可。word的格式如下处理就行:

  deviations是后面js代码里传递的对象名称。以{#deviations}开头,{/deviations}结尾。类似于for循环。index、code这些字段就是item.index,item.code等。只不过省去了item。

test.json文件格式如下:

css 复制代码
[  {    "code": "测试code1",    "reason": "测试reason1",    "inspect": "测试inspect1",    "complation": "测试complation1"  },  {    "code": "测试code2",    "reason": "测试reason2",    "inspect": "测试inspect2",    "complation": "测试complation2"  }]

可以简单实现的代码如下根据自己需求去更改就行:

javascript 复制代码
import fs from "fs/promises";
import Docxtemplater from "docxtemplater";
import PizZip from "pizzip";

async function main() {
  // 读取模板
  const templateContent = await fs.readFile("测试.docx");

  // 加载数据
  const data = JSON.parse(await fs.readFile("test.json", "utf8"));

  // 构造符合模板要求的数据结构
  const reportData = {
    deviations: data.map((item, i) => ({
      index: i + 1,
      code: item.code || "",
      reason: item.reason || "",
      inspect: item.inspect || "",
      complation: item.complation || "",
    })),
  };

  // 渲染模板
  const zip = new PizZip(templateContent);
  const doc = new Docxtemplater(zip, {
    paragraphLoop: true,
    linebreaks: true,
    nullGetter: () => "",
  });
  doc.render(reportData);

  const buffer = doc
    .getZip()
    .generate({ type: "nodebuffer", compression: "DEFLATE" });
  await fs.writeFile("test输出.docx", buffer);
}

main().catch(console.error);

输出的结果如下:

相关推荐
百度一下吧41 分钟前
umi后台管理项目实战:从工程搭建到生产构建
java·前端·javascript
haerapi43 分钟前
仓库拣货路线不只靠最短边:S 形启发式的反例记录
android·开发语言·javascript
事圆则缓1 小时前
Flutter 状态管理框架对比(六):同一个购物车,四种方案怎么落地?
前端·javascript·flutter
500841 小时前
React Native for OpenHarmony 实战:三方库 react-native-torch 的鸿蒙化适配指南
javascript·react native·react.js·harmonyos
500842 小时前
React Native for OpenHarmony 实战:三方库 react-native-device-uptime 的鸿蒙化适配指南
javascript·分布式·react native·react.js·harmonyos
admin and root10 小时前
「AI安全篇」实战AntiDebug自动化JS逆向加解密MCP
javascript·人工智能·网络安全·自动化·漏洞挖掘·cnvd·src赏金
wengad12 小时前
从 wangEditor 迁到 wangEditor-next
前端·javascript·vue.js
行者-全栈开发13 小时前
【前端/JS框架】CVE-2026-3854:GitHub Enterprise Server X-Stat注入XSS漏洞深度剖析与紧急修复指南
前端·javascript·github
怕浪猫15 小时前
2026年金九银十,我面了22个前端
前端·javascript·面试
前端的日常15 小时前
一个人+AI做情侣食谱小程序,30天纯赚
前端·javascript·后端