随身笔记
随身笔记

导出插件file-saver.js

可以将blob数据类型导出成图片、记事本txt,也可以将table、json导出成excel。

官网:https://github.com/eligrey/FileSaver.js

在线演示:https://www.jq22.com/jquery-info11353

 

table导出成excel案例

npm install file-saver --save
npm install xlsx --save

 

//以elm为例:
在 table  添加 id='outTable'

<el-table  id="outTable">

 

exportform.js //封装的导出功能

import {
    Message
} from 'element-ui';
import FileSaver from "file-saver";
import XLSX from "xlsx";

const exportform = {
    /*
      bind 钩子函数,第一次绑定时调用,可以在这里做初始化设置
      el: 作用的 dom 对象
      value: 传给指令的值,
    */
    bind(el, {
        value
    }) {
        el.$value = value; // 用一个全局属性来存传进来的值,因为这个值在别的钩子函数里还会用到
        el.handler = () => {
            if (!el.$value) {
                // 值为空的时候,给出提示,我这里的提示是用的 ant-design-vue 的提示,你们随意
                Message({
                    message: '无文件名!',
                    type: 'warning',
                    customClass: 'zZindex'
                });
                return;
            }
            var workbook = XLSX.utils.table_to_book(document.querySelector("#outTable")); //把DOM TABLE元素转换为工作簿对象
            var worksheet = workbook.Sheets[workbook.SheetNames[0]]; //返回一个表示工作表的对象。
            var wopts = { bookType:'xlsx', bookSST:false, type:'array' };
            var wbout = XLSX.write(workbook,wopts);
            try {
                FileSaver.saveAs(
                    new Blob([wbout], {
                        type: "application/octet-stream",
                    }),
                    el.$value + ".xlsx"
                );
            } catch (e) {
                if (typeof console !== "undefined") console.log(e, workbook);
            }
        };
        // 绑定点击事件,就是所谓的一键 copy 啦
        el.addEventListener('click', el.handler);
    },
    // 当传进来的值更新的时候触发
    componentUpdated(el, {
        value
    }) {
        el.$value = value;
    },
    // 指令与元素解绑的时候,移除事件绑定
    unbind(el) {
        el.removeEventListener('click', el.handler);
    },
};

export default exportform

 

directives.js //赋值内置指令

import exportform from './exportform.js';
// 自定义指令
const directives = {
  exportform
};

export default {
    install(Vue){
        //处理多个指令用法 
        Object.keys(directives).forEach((key)=>{
            Vue.directive(key,directives[key]);
        })
    }
}

 

main.js

import Directives from './directives';    //引入下就好

 

使用!!!!!

<button v-exportform="'我是导出的文件名'">点击导出</button>

 

json导出成excel

json数据导出成excel

随身笔记

导出插件file-saver.js
可以将blob数据类型导出成图片、记事本txt,也可以将table、json导出成excel。 官网:https://github.com/eligrey/FileSaver.js 在线演示:https://www.jq22.com/jquery-info11353 …
扫描二维码继续阅读
2023-02-17