使用docxtemplater模板语法,导出多个word文件,并生成zip压缩包
文章目录
- 前言:
- 一、插件准备:
- 二、创建一个 download-zip.ts 文件,内容为:
- 三、页面使用:
- 四、word模板:
- 五、结果如下:
- 六、基本语法:
前言:
1、前端使用的是vue、element-ui 框架
2、el-table 多选列表,批量勾选数据后,需要每一条数据生成一个word文件,最终导出一个zip压缩包
一、插件准备:
npm install --save docxtemplater pizzip jszip-utils jszip file-saver
如果想使用高级语法,可引入以下两个插件, 可解析更多表达式:
npm install --save angular-expressions lodash
二、创建一个 download-zip.ts 文件,内容为:
import docxtemplater from 'docxtemplater';
import PizZip from 'pizzip';
import JSZipUtils from 'jszip-utils'
import { saveAs } from 'file-saver';
import JSZip from 'jszip';// 引入angular-expression 解析器
let expressions = require("angular-expressions");
let assign = require("lodash/assign");
expressions.filters.lower = function (input: any) {if (!input) return input;return input.toLowerCase();
};
function angularParser(tag: any) {tag = tag.replace(/^\.$/, "this").replace(/(’|‘)/g, "'").replace(/(“|”)/g, '"');const expr = expressions.compile(tag);return {get: function (scope: any, context: any) {let obj = {};const scopeList = context.scopeList;const num = context.num;for (let i = 0, len = num + 1; i < len; i++) {obj = assign(obj, scopeList[i]);}return expr(scope, obj);},};
}// 导出方法
export const exportDocx = (tempDocxPath: string, list: any[], zipName: string) => {const promises: any[] = [];const zips = new JSZip();// 循环数据,生成word文件list.forEach((element, index) => {let fileName = zipName + '(' + index + ')' + '.docx'; // word文件名称let data = element;const promise = new Promise((resolver: any, reject) => {JSZipUtils.getBinaryContent(tempDocxPath, (error: any, content: any) => {if (error) {throw error;}let zip = new PizZip(content);let doc = new docxtemplater().loadZip(zip).setOptions({ parser: angularParser });doc.setData(data);try {doc.render();} catch (error: any) {throw error;}let out = doc.getZip().generate({type: 'blob',mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'});// 添至zip集合中zips.file(fileName, out, { binary: true });resolver();})})promises.push(promise);})// 下载zip包Promise.all(promises).then(() => {zips.generateAsync({ type: 'blob' }).then((content: any) => {saveAs(content, zipName);})})
}
三、页面使用:
import { exportDocx } from '@/utils/download-zip';/*** @description: 导出成绩单
*/
private exportPoliceInfoFn() {// 模拟数据const tempData = [{person: {number: '001',name: '张三',age: 20,sex: 0},results: [{subject: '语文',record: 95,teacher: '李白'},{subject: '数学',record: 130,teacher: '华罗庚'},{subject: '物理',record: 120,teacher: '钱学森'}]},{person: {number: '002',name: '李四',age: 22,sex: 1},results: [{subject: '语文',record: 115,teacher: '李白'},{subject: '数学',record: 140,teacher: '华罗庚'},{subject: '物理',record: 130,teacher: '钱学森'}]}];// 调用方法exportDocx('/doc/成绩单.docx', tempData, '成绩单');
}
四、word模板:
五、结果如下:
六、基本语法:
对象:
eg: let person = {name: '张三', age: 34};{person.name} {person.age} 或者 {#person} {name} {age} {/person}
数组循环:
eg: let list = [{name: '张三', age: 12}, {name: '李四', age: 23}];{#list}{name} {age}
{/list}
一维数组循环:
eg: let array = ['one', 'two', 'three'];{#array}{.}
{/array}
判断:
{#isTrue}
...
{/}
(完)
使用docxtemplater模板语法,导出多个word文件,并生成zip压缩包相关推荐
- JS - 导出一个或多个pdf 生成zip压缩包
前端生成和导出pdf zip: 使用的插件:jspdf.html2canva.jszip.file-saver 插件安装 :npm install jspdf html2canvas jszip f ...
- 前端提效 Magic,导出多个Excel文件并打包为压缩包下载
本篇文章主要介绍使用 exceljs.file-saver.jszip实现下载包含多层级文件夹.多个 excel.每个 excel 支持多个 sheet 的 zip 压缩包. 上一篇文章:前端复杂表格 ...
- SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...
- Java POI导出word文件及生成表格
HWPF是处理 Microsoft Word 97(-2007) .doc文件格式,它还为较旧的Word 6和Word 95文件格式提供了有限的只读支持.包含在poi-scratchpad-XXX.j ...
- php 模板替换,使用PHPWord对Word文件做模板替换
因工作需要,使用了版本比较旧的PHPWord项目 官方已不见维护更新,上次版本更新是在Fri Jul 8, 2011 at 8:00 AM 如果PHP版本>=5.3.3,强烈推荐使用PHPOff ...
- 使用poi-tl根据word模板生成word文件——解决生成的表格里数据行有小标题的这种需求
一.需求 总体需求是根据word模板和数据,生成对应的word文件.经过技术调查后,确定poi-tl是最合适,最方便的框架.于是参考了官方文档和一些文章,很快就掌握了基本用法,这里附一下官方文档,写的 ...
- POI导出多个Excel文件,生成压缩文件
众所周知,每个Excel文件最多可以存储255个sheet.当需要导出的sheet数超过255个时,比较好的办法是将多个Excel文件压缩成.zip文件再导出 步骤:1 将需要导出的表封装到listB ...
- excel文件每行数据按模板批量导出为一个excel文件
程序下载: 程序正在完善中,愿意参与测试的朋友请在评论区留下邮箱. 去年有网友向我提出定制开发这样一个程序,就是excel文件每行数据生成一个单独的excel文件,插入对应的二维码图片,我猜测应该是根 ...
- 导出多个Excel文件并打包为压缩包下载
问题简述 之前系统里做的导出都是千篇一律的所有文件导在一个excel里,有现成的工具,现成的逻辑. 突然有那么一天,一切都不再现成了,我得把数据们导出为压缩包,一人一个Excel谁也不干涉谁.研究和参 ...
最新文章
- [LeetCode]: 53: Maximum Subarray
- hbuilder打包ios_ios开发证书的作用及申请步骤
- CF1479B Painting the Array
- vue中通过js控制页面样式方法
- 【计算机组成原理】双端口RAM和多模块存储器
- java程序实验报告_实验报告一
- nullnullc++ 精简版 fps限制
- php cpu型号,linux如何查看cpu型号?
- 为何要弃 Java、Swift 于不顾,而选择 Python?
- 直击平昌!2天40位大咖的平昌区块链论坛精华都在这了!
- docker redis 删除集群_基于Docker的Redis集群实践
- 万象物语找回服务器,万象物语新手大型攻略 服务器、初始号的选择和新手前期需要做的事说明...
- POJ1088(dp)
- 模拟退火算法(SA)
- Hive数据分析实验报告
- 阿里云云计算专业认证考试(ACP级)
- JAVJ输出二进制数字
- 谈谈MVC和MVVM
- 微信开放平台转发到朋友圈之andriod
- 基于蓝牙串口通信,实现实时脉象采集(项目总结与思路梳理)