如何用docx-templates实现单页表格填充单条数据?
问题描述
我正在使用docx-templates通过模板填充数据生成Word文件,模板是表格,希望每条数据单独占一页表格,但不知道怎么实现。
现有代码
import { createReport } from 'docx-templates'; import fs from 'fs'; // 补充缺失的模块导入 let content = fs.readFileSync("./Check List Template.docx"); let rosterA=[ { a: 'Operator4', count: 1, b: 'Operator6', c: 'Operator8' }, { a: 'Operator5', count: 2, b: 'Operator6', c: 'Operator8' }, { a: 'Operator5', count: 3, b: 'Operator1', c: 'Operator4' }, { a: 'Operator6', count: 4, b: 'Operator8', c: 'Operator1' }, { a: 'Operator6', count: 5, b: 'Operator4', c: 'Operator8' }, { a: 'Operator4', count: 6, b: 'Operator6', c: 'Operator1' }, { a: 'Operator8', count: 7, b: 'Operator6', c: 'Operator5' }, { a: 'Operator8', count: 8, b: 'Operator6', c: 'Operator4' }, { a: 'Operator', b: 'Operator8', count: 9, c: 'Operator5' }, { a: 'Operator1', count: 10, b: 'Operator4', c: 'Operator6' }, { a: 'Operator1', count: 11, b: 'Operator5', c: 'Operator6' } ] const buffer = await createReport({ template: content, data: { rosterA } }); fs.writeFileSync("output.docx",buffer);
模板截图

解决方法
要实现每条数据生成单独一页的表格,需在Word模板中结合docx-templates的循环标签与分页设置,步骤如下:
修改Word模板
- 打开模板文件,在表格开头位置插入循环起始标签
{#rosterA},在表格末尾之后插入分页符(Word操作路径:「插入」→「分页」),再在分页符后方插入循环结束标签{/rosterA}。 - 注:此方式会在最后一条数据后生成空白页,若需避免可使用条件标签优化。
- 打开模板文件,在表格开头位置插入循环起始标签
优化分页(可选)
在模板中把分页符替换为带条件判断的内容:{^if index !== rosterA.length - 1} [此处插入分页符] {/if}其中
index是docx-templates循环时的内置变量,代表当前数据项的索引,通过判断是否为最后一条数据,避免生成多余空白页。重新生成文档
保存修改后的模板,运行原有代码即可生成每条数据单独占一页的Word文件。
内容的提问来源于stack exchange,提问作者The KNVB
相关产品推荐
相关产品推荐

