首页 > 解决方案 > 如何使用 docxtemplater 在 word 文件中构建列表?

问题描述

我的模板文件(即template.docx)如下所示:

在此处输入图像描述

我的 node.js 代码:

let Docxtemplater = require('docxtemplater');
let fs = require('fs');
let path = require('path');
let PizZip = require('pizzip');
let content = fs.readFileSync(path.resolve(__dirname, 'template.docx'), 'binary');
let zip = new PizZip(content);
let doc = new Docxtemplater(zip, { paragraphLoop: true, linebreaks: true });

let statData = {items:[{"name":"item 1","desc":"xxx\nyyyy" },{"name":"item 2","desc":"www\njjj"}]};
doc.setData(statData);
doc.render();
let buf = doc.getZip().generate({ type: 'nodebuffer' });
fs.writeFileSync(path.resolve(__dirname, 'output.docx'), but);

我预计生成的 word 文件应如下所示:

在此处输入图像描述

但是,实际结果如下所示:

在此处输入图像描述

我在“项目描述”单元格中创建了一个列表。

然而,实际结果并不如我所愿。

我该如何解决这个问题?

标签: javascriptnode.jsdocxtemplater

解决方案


在您的数据中,您有:

{
  items: [
    { name: "item 1", desc: "xxx\nyyyy" },
    { name: "item 2", desc: "www\njjj" },
  ];
}

在您的模板中,您使用:

- {desc}

这确实只会在列表中添加一个换行符,而不是创建一个新的列表项。

要创建一个新的列表项,我会将结构更改为:

{
  items: [
    { name: "item 1", desc: ["xxx", "yyyy"] },
    { name: "item 2", desc: ["www", "jjj"] },
  ];
}

在您的模板中:

- {-w:p desc}{.}{/}

这也可以通过这个演示在线测试:https ://docxtemplater.com/demo/#loop-list


推荐阅读