javascript - 如何使用 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 文件应如下所示:
但是,实际结果如下所示:
我在“项目描述”单元格中创建了一个列表。
然而,实际结果并不如我所愿。
我该如何解决这个问题?
解决方案
在您的数据中,您有:
{
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
推荐阅读
- sql-server - 如何为同一报表创建具有两个不同参数选择数据的 SSRS 报表订阅?
- python - 将具有相同名称但不同编号的多个列复制到 python/pandas 中的新 df
- python - model.parameters() 没有在 Pytorch 的线性回归中更新
- regex - 正则表达式查找具有特定模式的所有文件
- flutter - 在 Flutter 中使用 SharedPreferences 保留一个整数
- drupal - Drupal 8 从数据库中获取数据
- python - keras自动编码器cnn没有训练
- r - R Shiny - 拍摄输出快照以避免递归
- javascript - 元素类型无效:应为字符串或类函数
- woocommerce - 如何禁用 Woocommerce 设置向导?