Vue+Element前端導入導出Excel

2021-03-06 web前端開發

作者 | xrkffgg
來源 | https://www.jianshu.com/p/331c0e8164e9

1、 前言1.1 業務場景

由前臺導入Excel表格,獲取批量數據。

根據一個數組導出Excel表格。

2、 實現原理2.1 引入工具庫

file-saver、xlsx、script-loader

npm install -S file-saver xlsx

npm install -D script-loader

2.2 導入Excel2.2.1 Element 上傳控制項

<el-uploadclass="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">    <el-button size="small" type="primary">點擊上傳</el-button>    <div slot="tip" class="el-upload__tip">只 能 上 傳 xlsx / xls 文 件</div></el-upload>

limitUpload = 1限制只能上傳1個文件

accept為默認打開的可上傳的文件格式

handleChange(file, fileList){this.fileTemp = file.raw},handleRemove(file,fileList){this.fileTemp = null},

fileTemp這裡定義了一下變量,指向最新上傳的附件,起始定義為null。

這裡發現控制項file.raw是我們要用的File類型。

2.2.2 導入判斷
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:'附件格式錯誤,請刪除後重新上傳!'        })    }} else {this.$message({        type:'warning',        message:'請上傳附件!'    })}

2.2.3 導入函數
importfxx(obj) {let _this = this;this.file = objvar rABS = false; var f = this.file;var reader = new FileReader();    FileReader.prototype.readAsBinaryString = function(f) {var binary = "";var rABS = false; var pt = this;var wb; 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)), {                 type: 'base64'            });        } else {            wb = XLSX.read(binary, {type: 'binary'            });        }        outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);this.da = [...outdata]let arr = []this.da.map(v => {let obj = {}                obj.code = v['設備ID']                obj.type = v['設備型號']                arr.push(obj)            })return arr        }        reader.readAsArrayBuffer(f);    }    if(rABS) {        reader.readAsArrayBuffer(f);    } else {        reader.readAsBinaryString(f);    }},

arr就是我們要的結果,是一個數組。每一個值是個對象,包含了code type兩個屬性。

excel中格式為橫向 設備ID 和 設備型號。

2.3 導出Excel2.3.1 引入JS文件

可參考下載地址:- github

將其中的2個JS文件放入到自己的工程中。

2.3.2 修改JS文件中地址

打開Export2Excel.js,會出現如上圖所示。由於本人將Blob.js和Export2Excel.js放到了同一級,這裡引入是這樣的。

這幾個文件不支持import引入,所以需要script-loader來將他們掛載到全局環境下。

2.3.3 導出函數
getExcel(res) {require.ensure([], () => {const { export_json_to_excel } = require('../../introduce/Export2Excel.js')const tHeader = ['姓名', '年齡']const filterVal = ['name', 'age']const list = resconst data = this.formatJson(filterVal, list)        export_json_to_excel(tHeader, data, '導出列表名稱')    })},
formatJson(filterVal, jsonData) {return jsonData.map(v => filterVal.map(j => v[j]))},

這裡的引用請根據自己的層級關係和文件夾命名

require('../../introduce/Export2Excel.js')

res為傳入的數組,格式如:

res =[{name:'小白',age:'18'},{name:'小黑',age:'16'}]

tHeader為導出Excel表頭名稱,導出列表名稱即為導出Excel名稱。

下載的Excel位置根據瀏覽器設置的下載位置而定。

3、後記

感謝支持。若不足之處,歡迎大家指出,共勉。

如果覺得不錯,記得 點讚 ,謝謝大家 。

相關焦點

  • 如何創建vue項目並使用element框架中的el-select
    1、在電腦硬碟上,找到一個位置,新建一個文件夾wmn;滑鼠右鍵選擇Git Bash Here,並在Git窗口輸入cnpm install --global vue-cli命令:cnpm install --global vue-cli
  • 一張圖教你快速玩轉vue-cli3
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言本文系統的梳理了vue-cli3搭建項目的常見用法,目的在於讓你快速掌握獨立搭建vue項目的能力。
  • 使用electron+vue開發一個跨平臺todolist(便籤)桌面應用
    + electron-builder 開發的跨平臺 todolist(便籤)桌面應用相關技術electron 9.x[1]vue 2.x[2]vue-cli-plugin-electron-builder[3]
  • 網際網路海量新鮮文章批量導出&海量關鍵詞內容規劃可導出Excel分析
    因此,5118在素材搜索及內容規劃兩大工具中,新增了導出功能,導出功能結合運營工具到底幫助有多大?下面一起來看看,根據用戶提出的需求,他們將是如何運用的。
  • 前端娛樂圈大瓜:前端人因為 Vue3 的 Ref-sugar 提案打起來了!
    關注前端娛樂圈的朋友們都知道,最近確實發生了一件大事。首先明確一件事情,想要吃這個前端娛樂圈的大瓜,各位看官姥爺得先用一下剛新鮮出爐、十分熱乎的 Vue3.0 版本,否則,這個瓜可能不太甜:)  咱們來捋一捋到底咋回事。
  • 《QQ飛車》手遊捏臉導出導入方法 怎麼捏臉導出導入
    導 讀 《QQ飛車》手遊捏臉的數據我們應該如何進行導出和導入呢?對此,很多小夥伴還不是很了解。
  • 《精通react/vue組件設計》之實現一個健壯的警告提示(Alert)組件
    之所以會寫組件設計相關的文章,是因為作為一名前端優秀的前端工程師,面對各種繁瑣而重複的工作,我們不應該按部就班的去"辛勤勞動",而是要根據已有前端的開發經驗,總結出一套自己的高效開發的方法.其他業務類型所以我們在設計組件系統的時候可以參考如上分類去設計,該分類也是antd, element, zend等主流UI庫的分類方式.
  • GitHub上star超1.2k的vue表格組件,功能太多又實用
    項目地址:Github:https://github.com/xuliangzhan/vxe-table碼云:https://gitee.com/xuliangzhan_admin/vxe-table一個基於 vue
  • 如何利用愛思助手導出和導入iPhone照片
    如何導出?要想處理這些照片,自然是要先導出到電腦硬碟上才行,至於怎麼導出,這裡是有講究的,不然會讓你「事倍功半」的。那麼具體怎麼操作呢?打開愛思助手以後,依次點擊「我的設備」——「照片」——「相機膠捲」,到這裡不要先急著導出,必須先進行導出設置,如圖
  • 如何寫一個vue組件專題及常見問題 - CSDN
    computed 屬性vue 的 computed 屬性默認是只讀的,你可以提供一個 setter。類型為 String 時,支持多層訪問:user.info.id,但不支持 user.info[0].id,此種情況請使用 Function處理 rowKey 生成 RowIdentity 的函數源碼://https://github.com/ElemeFE/element/blob/dev/packages/
  • Excel打開空白問題解決方法(一鍵註冊表導入)
    暫無其它更好方法,找了一鍵導入註冊表的方法,每次打開excel遇到類似問題時,只要點一下註冊表文件導入即可。\"%1\""[HKEY_CLASSES_ROOT\Excel.CSV\shell\Open\command]@="\"C:\\Program Files\\Microsoft Office\\Root\\Office16\\EXCEL.EXE\" \"%1\""3、另存文件名為excel.reg
  • 通訊錄怎麼導入新手機,OPPO手機通訊錄轉移怎麼最方便?
    準備將OPPO手機換成蘋果,想找個方便點的方法把舊手機裡的數據複製到新手機的方法,像是通訊錄怎麼導入新手機,特別是OPPO手機通訊錄轉移,有人同樣感興趣嗎?
  • 前端高效開發必備的 js 庫梳理
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫之前有很多人問學好前端需要學習哪些 js 庫, 主流框架應該學 vue 還是 react ? 針對這些問題, 筆者來說說自己的看法和學習總結.
  • 精通React/Vue系列之帶你實現一個功能強大的通知提醒框
    React',description: '學前端,學React/vue/Node,快快加入我們吧'});我們看到的組件效果可能是這樣的:那麼我們如何實現這樣的調用方式呢?本文將會使用React來開發該組件,也會使用到Javascript中常用的一些設計模式,比如單例模式,但是不管你使用什麼框架來實現,原理都是通用的,如果感興趣的朋友可以用vue也實現以一下。
  • 好物推薦|Hitachi N3000 導出/導入儀使用報告
    Hitachi CM-N3000 溫熱冰肌離子導入儀這個導入儀有雙面設計,把整個護膚過程分為4個步驟(當然你可以拆開步驟單獨用,我這個懶人有時候就會跳過一個步驟或者只用一個步驟)導入儀的正面最上是一個可制40度溫熱的導出/導入頭附機有送2個塑料環,把棉片固定在導入頭上進行液體類護膚品的導出或導入震動幅度也可以調節,一般我就用中度中間部分就是寫著
  • 精通react/vue組件設計之配合React Portals實現一個(Drawer)組件
    通過組件的設計過程,大家會接觸到一個完成健壯的組件設計思路和方法,也能在實現組件的過程逐漸對react/vue的高級知識和技巧有更深的理解和掌握,並且在企業實際工作做遊刃有餘.之所以會寫組件設計相關的文章,是因為作為一名前端優秀的前端工程師,面對各種繁瑣而重複的工作,我們不應該按部就班的去"辛勤勞動",而是要根據已有前端的開發經驗,總結出一套自己的高效開發的方法.
  • 匯總csv文件其實很簡單,用excel三步即可搞定,並且支持數據更新
    Hello,大家好,今天跟大家分享下我們如何快速的匯總多個csv文件,這個也是之前一個粉絲問道的問題,前幾天忙沒時間寫,今天就跟大家分享下Csv文件常見於我們從系統中導出的文件,或者是下載的一些網頁的數據,因為是從系統中導出的文件,他們的格式都是一摸一樣的,匯總多個csv文件與合併多個excel工作薄十分類似,下面就讓我們來看下他是如何操作的
  • 一日一技丨PPT文檔批量導出、導入成JPG/PNG圖片!
    在PPT的設計和製作過程中,我們常常需要處理相應的圖片,為了偏於展示,需要將PPT轉換成圖片,很多人的做法都是一一截圖保存,如果數量過多非常耽誤時間,今天小小迅就教大家批量將PPT導出成圖片!  1 批量導出成圖片我們先準備一份需要轉換成圖片的PPT,打開後點擊【文件】-【另存為】-選擇保存圖片的位置-【保存類型】修改為JPG或者PNG。
  • 前端組件/庫打包利器rollup使用與配置實戰
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫目前主流的前端框架vue和react都採用rollup來打包,為了探索rollup的奧妙,接下來就讓我們一步步來探索,並基於rollup搭建一個庫打包腳手架,來發布自己的庫和組件。
  • 精通react/vue組件設計之實現一個Tag(標籤)和Empty(空狀態)組件
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言本文是筆者寫組件設計的第五篇文章,之所以會寫組件設計相關的文章,是因為作為一名前端優秀的前端工程師,面對各種繁瑣而重複的工作,我們不應該按部就班的去