vue导出word文档遇到的问题


一、安装依赖

docxtemplater pizzip jszip-utils file-saver

先安装这四个依赖

二、创建docx.js文件

1.引入库

import docxtemplater from 'docxtemplater';
import PizZip from 'pizzip';
import JSZipUtils from 'jszip-utils';
import { saveAs } from 'file-saver';

export const exportDocx = (path, data, fileName) => {
    JSZipUtils.getBinaryContent(path, (error, content) => {
      if (error) {
        throw error;
      }
      let zip = new PizZip(content);
      let doc = new docxtemplater().loadZip(zip);
      doc.setData(data);
      try {
        doc.render();
      } catch (error) {
        let e = {
          message: error.message,
          name: error.name,
          stack: error.stack,
          properties: error.properties,
        };
        console.log({
          error: e
        });
        throw error;
      }
      let out = doc.getZip().generate({
        type: "blob",
        mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      }); //Output the document using Data-URI
      saveAs(out, fileName);
    });
  };  

2.页面中引入docx.js文件

import { exportDocx } from '@/utils/docx';
download(){
	let datas = {
		title: "xxx",
		table: data //数据请求
	}
	exportDocx( uri,datas, `xxx文件.docx`);
}

3.解决问题

uri的路径:
关于exportDocx传入的word模板的路径问题,如果是vue-cli是版本2 word模板要放在static的文件夹下,如果是vue-cli是版本3,word模板要放在public文件夹下。路径错误的话报错Can‘t find end of central directory : is this a zip file ?
word模板赋值:
上面datas的table的数据在模板内展示,word模板开头要以{#table}开头,{/table}结束,不然会报错Uncaught Error: TemplateError: Multi error at XMLHttpRequest.xhr.onreadystatechange
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值