文章目录

  • 前言:
  • 一、插件准备:
  • 二、创建一个 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压缩包相关推荐

  1. JS - 导出一个或多个pdf 生成zip压缩包

    前端生成和导出pdf zip: 使用的插件:jspdf.html2canva.jszip.file-saver 插件安装  :npm install jspdf html2canvas jszip f ...

  2. 前端提效 Magic,导出多个Excel文件并打包为压缩包下载

    本篇文章主要介绍使用 exceljs.file-saver.jszip实现下载包含多层级文件夹.多个 excel.每个 excel 支持多个 sheet 的 zip 压缩包. 上一篇文章:前端复杂表格 ...

  3. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?

    前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...

  4. Java POI导出word文件及生成表格

    HWPF是处理 Microsoft Word 97(-2007) .doc文件格式,它还为较旧的Word 6和Word 95文件格式提供了有限的只读支持.包含在poi-scratchpad-XXX.j ...

  5. php 模板替换,使用PHPWord对Word文件做模板替换

    因工作需要,使用了版本比较旧的PHPWord项目 官方已不见维护更新,上次版本更新是在Fri Jul 8, 2011 at 8:00 AM 如果PHP版本>=5.3.3,强烈推荐使用PHPOff ...

  6. 使用poi-tl根据word模板生成word文件——解决生成的表格里数据行有小标题的这种需求

    一.需求 总体需求是根据word模板和数据,生成对应的word文件.经过技术调查后,确定poi-tl是最合适,最方便的框架.于是参考了官方文档和一些文章,很快就掌握了基本用法,这里附一下官方文档,写的 ...

  7. POI导出多个Excel文件,生成压缩文件

    众所周知,每个Excel文件最多可以存储255个sheet.当需要导出的sheet数超过255个时,比较好的办法是将多个Excel文件压缩成.zip文件再导出 步骤:1 将需要导出的表封装到listB ...

  8. excel文件每行数据按模板批量导出为一个excel文件

    程序下载: 程序正在完善中,愿意参与测试的朋友请在评论区留下邮箱. 去年有网友向我提出定制开发这样一个程序,就是excel文件每行数据生成一个单独的excel文件,插入对应的二维码图片,我猜测应该是根 ...

  9. 导出多个Excel文件并打包为压缩包下载

    问题简述 之前系统里做的导出都是千篇一律的所有文件导在一个excel里,有现成的工具,现成的逻辑. 突然有那么一天,一切都不再现成了,我得把数据们导出为压缩包,一人一个Excel谁也不干涉谁.研究和参 ...

最新文章

  1. [LeetCode]: 53: Maximum Subarray
  2. hbuilder打包ios_ios开发证书的作用及申请步骤
  3. CF1479B Painting the Array
  4. vue中通过js控制页面样式方法
  5. 【计算机组成原理】双端口RAM和多模块存储器
  6. java程序实验报告_实验报告一
  7. nullnullc++ 精简版 fps限制
  8. php cpu型号,linux如何查看cpu型号?
  9. 为何要弃 Java、Swift 于不顾,而选择 Python?
  10. 直击平昌!2天40位大咖的平昌区块链论坛精华都在这了!
  11. docker redis 删除集群_基于Docker的Redis集群实践
  12. 万象物语找回服务器,万象物语新手大型攻略 服务器、初始号的选择和新手前期需要做的事说明...
  13. POJ1088(dp)
  14. 模拟退火算法(SA)
  15. Hive数据分析实验报告
  16. 阿里云云计算专业认证考试(ACP级)
  17. JAVJ输出二进制数字
  18. 谈谈MVC和MVVM
  19. 微信开放平台转发到朋友圈之andriod
  20. 基于蓝牙串口通信,实现实时脉象采集(项目总结与思路梳理)

热门文章

  1. VS Code报错:应为表达式 ts1109
  2. 个体门店微信小程序在线开店的教程
  3. 关于Unity中的资源管理,你可能遇到这些问题(UWA报告)
  4. JS判断页面是在pc端还是移动端打开方法
  5. 第一章:互联网和万维网的基础
  6. 人工智能技术在专利中的实际应用
  7. 设计计算机组装方案音频,音频系统设计方案解析.doc
  8. 3D数学基础:Matrix4*3类代码清单
  9. 不同类型的论文查重率是多少?
  10. 使用LibreOffice在线word转换pdf