1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Vue+Element前端導(dǎo)入導(dǎo)出Excel

        共 3417字,需瀏覽 7分鐘

         ·

        2020-03-05 23:23

        (給前端大學(xué)加星標(biāo),提升前端技能.

        作者:xrkffgg

        https://segmentfault.com/a/1190000018993619

        1、 前言

        1.1 業(yè)務(wù)場(chǎng)景

        由前臺(tái)導(dǎo)入Excel表格,獲取批量數(shù)據(jù)。根據(jù)一個(gè)數(shù)組導(dǎo)出Excel表格。
        2、 實(shí)現(xiàn)原理

        2.1 引入工具庫(kù)

        file-saver、xlsx、script-loader
        npm install -S file-saver xlsxnpm install -D script-loader

        2.2 導(dǎo)入Excel

        2.2.1 Element 上傳控件

        d120d7e7253dd531e1734339639c21af.webp
            class="upload-demo"    action=""    :on-change="handleChange"    :on-exceed="handleExceed"    :on-remove="handleRemove"    :file-list="fileListUpload"    :limit="limitUpload"    accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"    :auto-upload="false">    點(diǎn)擊上傳    
        只 能 上 傳 xlsx / xls 文 件
        limitUpload = 1限制只能上傳1個(gè)文件
        accept為默認(rèn)打開(kāi)的可上傳的文件格式
        handleChange(file, fileList){    this.fileTemp = file.raw},
        handleRemove(file,fileList){ this.fileTemp = null},
        fileTemp這里定義了一下變量,指向最新上傳的附件,起始定義為null。
        這里發(fā)現(xiàn)控件file.raw是我們要用的File類(lèi)型。

        2.2.2 導(dǎo)入判斷

        if(this.fileTemp){    if((this.fileTemp.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') || (this.fileTemp.type == 'application/vnd.ms-excel')){        this.importfxx(this.fileTemp)    } else {        this.$message({            type:'warning',            message:'附件格式錯(cuò)誤,請(qǐng)刪除后重新上傳!'        })    }} else {    this.$message({        type:'warning',        message:'請(qǐng)上傳附件!'    })}

        2.2.3 導(dǎo)入函數(shù)

        importfxx(obj) {    let _this = this;    // 通過(guò)DOM取文件數(shù)據(jù)    this.file = obj    var rABS = false; //是否將文件讀取為二進(jìn)制字符串    var f = this.file;    var reader = new FileReader();    //if (!FileReader.prototype.readAsBinaryString) {    FileReader.prototype.readAsBinaryString = function(f) {        var binary = "";        var rABS = false; //是否將文件讀取為二進(jìn)制字符串        var pt = this;        var wb; //讀取完成的數(shù)據(jù)        var outdata;        var reader = new FileReader();        reader.onload = function(e) {        var bytes = new Uint8Array(reader.result);        var length = bytes.byteLength;        for(var i = 0; i < length; i++) {            binary += String.fromCharCode(bytes[i]);        }        var XLSX = require('xlsx');        if(rABS) {            wb = XLSX.read(btoa(fixdata(binary)), { //手動(dòng)轉(zhuǎn)化                type: 'base64'            });        } else {            wb = XLSX.read(binary, {                type: 'binary'            });        }        outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);//outdata就是你想要的東西            this.da = [...outdata]            let arr = []            this.da.map(v => {                let obj = {}                obj.code = v['設(shè)備ID']                obj.type = v['設(shè)備型號(hào)']                arr.push(obj)            })            return arr        }        reader.readAsArrayBuffer(f);    }
        if(rABS) { reader.readAsArrayBuffer(f); } else { reader.readAsBinaryString(f); }},
        arr就是我們要的結(jié)果,是一個(gè)數(shù)組。每一個(gè)值是個(gè)對(duì)象,包含了code?type兩個(gè)屬性。
        excel中格式為橫向 設(shè)備ID 和 設(shè)備型號(hào)。

        2.3 導(dǎo)出Excel

        2.3.1 引入JS文件

        可參考下載地址-?github:https://github.com/xrkffgg/Ktools/tree/master/JS/002.Excel將其中的2個(gè)JS文件放入到自己的工程中。

        2.3.2 修改JS文件中地址

        03c2bc8be0ca4b5db7fe8d4b85ee9a2b.webp
        打開(kāi)Export2Excel.js,會(huì)出現(xiàn)如上圖所示。由于本人將Blob.jsExport2Excel.js放到了同一級(jí),這里引入是這樣的。這幾個(gè)文件不支持import引入,所以需要script-loader來(lái)將他們掛載到全局環(huán)境下。

        2.3.3 導(dǎo)出函數(shù)

        getExcel(res) {    require.ensure([], () => {        const { export_json_to_excel } = require('../../introduce/Export2Excel.js')        const tHeader = ['姓名', '年齡']        const filterVal = ['name', 'age']        const list = res        const data = this.formatJson(filterVal, list)        export_json_to_excel(tHeader, data, '導(dǎo)出列表名稱')    })},
        formatJson(filterVal, jsonData) { return jsonData.map(v => filterVal.map(j => v[j]))},
        這里的引用請(qǐng)根據(jù)自己的層級(jí)關(guān)系和文件夾命名require('../../introduce/Export2Excel.js')
        res為傳入的數(shù)組,格式如:res =[{name:'小白',age:'18'},{name:'小黑',age:'16'}]tHeader為導(dǎo)出Excel表頭名稱,導(dǎo)出列表名稱即為導(dǎo)出Excel名稱。下載的Excel位置根據(jù)瀏覽器設(shè)置的下載位置而定。3、 后記感謝支持。若不足之處,歡迎大家指出,共勉。如果覺(jué)得不錯(cuò),記得 點(diǎn)贊 ,謝謝大家??

        分享前端好文,點(diǎn)亮?在看?a2d6e8367198e96d0ae1f1bd1f6cac95.webp

        瀏覽 48
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            99婷婷| 久草网站在线 | 色小姐AV| 色999日韩偷自拍人妻无1 | 国产精品色在线 | 欧美操片| 欧美黄片一级 | 逼逼毛片| 吃奶边添边摸边做边爱文章 | 勾搭足浴女技师国产在线 |