<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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)打開的可上傳的文件格式
          handleChange(file, fileList){    this.fileTemp = file.raw},
          handleRemove(file,fileList){ this.fileTemp = null},
          fileTemp這里定義了一下變量,指向最新上傳的附件,起始定義為null。
          這里發(fā)現(xiàn)控件file.raw是我們要用的File類型。

          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
          打開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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  97在线免费视频观看 | 欧美黄色电影在线 | 91探花秘 在线播放 | 一区二区三区四区在线 | 伊人婷婷在线 |