vue若依导出word文件,简单的实现

首先前端导包,注意exportDocx的导包位置要修改成你自己的

html 复制代码
import {exportDocx} from '@/utils/docUtil/docutil.js'; 
import {addDays} from 'date-fns';
import {listGongyi} from "@/api/system/detail";

然后新建一个测试按钮

html 复制代码
 <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="generateWordDoc"
        >导出
        </el-button>
      </el-col>

接下来是js文件

js 复制代码
    generateWordDoc(row) {
      const ids = row.id || this.ids;
      //查找后台数据库封装数据
      find(ids).then(response => {
        console.log(response.data)
        const data = {
          form: response.data,
          list: response.data.aaZzcgPurchases
        }
		//模板文件位置在public文件夹里
        exportDocx('/caigoudan.docx', data, `caigoudan.docx`)
      });
    }

然后将下面这个docutil.js文件复制到项目中,我是复制在utils/docUtil中

js 复制代码
import docxtemplater from 'docxtemplater';
import PizZip from 'pizzip';
import JSZipUtils from 'jszip-utils';
import {saveAs} from 'file-saver';

/**
 导出docx,导出word
 @param { String } tempDocxPath 模板文件路径
 @param { Object } data 文件中传入的数据
 @param { String } fileName 导出文件名称
 */
export const exportDocx = (tempDocxPath, data, fileName) => {
  // 读取并获得模板文件的二进制内容

  JSZipUtils.getBinaryContent(tempDocxPath, (error, content) => {


    // input.docx是模板。我们在导出的时候,会根据此模板来导出对应的数据
    // 抛出异常
    if (error) {
      throw error
    }
    // 创建一个JSZip实例,内容为模板的内容
    const zip = new PizZip(content)
    // 创建并加载docxtemplater实例对象
    const doc = new docxtemplater().loadZip(zip)
    // 设置模板变量的值
    doc.setData({
      ...data.form,
      list: data.list
    })

    try {
      // render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
      doc.render()
    } catch (error) {
      const e = {
        message: error.message,
        name: error.name,
        stack: error.stack,
        properties: error.properties
      }
      console.log({
        error: e
      })
      // The error thrown here contains additional information when logged with JSON.stringify (it contains a property object).
      throw error
    }
    const out = doc.getZip().generate({
      type: 'blob',
      mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    }) // Output the document using Data-URI
    saveAs(out, fileName)
  })
}

最后新建一个word模板文件,保存的格式要是docx才行哦

例如:

只要数据是集合,就得是{#list} 开头{/list}结尾

如果还有其他的集合,则自己修改data的值,记得配合修改:(自己研究一下立马就懂了)

另外自己的模板如果不弄页眉页脚的话,第二页是不显示页眉页脚的,所以要注意

注意,此模板文件必须放在项目中的public文件夹下 !!!

相关推荐
阳光是sunny10 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹10 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny10 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
小林ixn11 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker11 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜12 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
武子康12 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
一点一木13 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github
IT_陈寒14 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
kyriewen14 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程