Vue項目實現導入導出Excel表格功能


前提:在我的項目中我使用的是ElementUi前端UI框架,用到的是里面的Upload上傳組件。

第一步:需要安裝三個依賴

npm install -S file-saver xlsx  (這里其實安裝了2個依賴)

npm install -D script-loader

 

第二步:在main.js文件中全局導入掛載xlsx插件

//  導入excel插件

import XLSX from 'xlsx'

Vue.prototype.XLSX = XLSX

 

第三步:在src目錄新建一個文件夾(名字隨意),在這個文件夾里面放入2個JS文件分別是:Blob.js和Export2Excel.js,網上可百度下載。

 

第四步,需要的頁面的template標簽中開始寫代碼(我先寫導入的代碼)

<!-- 導入Excel -->
<el-upload
   action="/上傳文件的接口"
   :on-change="onChange"
   :auto-upload="false"
   :show-file-list="false"
   accept=".xls, .xlsx" >
   <el-button type="warning" icon="el-icon-folder-add">批量導入</el-button>
</el-upload>

 

第五步:然后在  methods: {}中配置方法,代碼如下:

 1 // ----------以下為導入Excel數據功能--------------
 2     // 文件選擇回調
 3     onChange(file, fileList) {
 4       console.log(fileList);
 5       this.fileData = file; // 保存當前選擇文件
 6       this.readExcel(); // 調用讀取數據的方法
 7     },
 8     // 讀取數據
 9     readExcel(e) {
10       console.log(e);
11       let that = this;
12       const files = that.fileData;
13       console.log(files);
14       if (!files) {
15         //如果沒有文件
16         return false;
17       } else if (!/\.(xls|xlsx)$/.test(files.name.toLowerCase())) {
18         this.$message.error("上傳格式不正確,請上傳xls或者xlsx格式");
19         return false;
20       }
21       const fileReader = new FileReader();
22       fileReader.onload = ev => {
23         try {
24           const data = ev.target.result;
25           // console.log(data)
26           const workbook = this.XLSX.read(data, {
27             type: "binary"
28           });
29           console.log(workbook.SheetNames);
30           if (workbook.SheetNames.length >= 1) {
31             this.$message({
32               message: "導入數據表格成功",
33               showClose: true,
34               type: "success"
35             });
36           }
37           const wsname = workbook.SheetNames[0]; //取第一張表
38           const ws = this.XLSX.utils.sheet_to_json(workbook.Sheets[wsname]); //生成json表格內容
39           console.log(ws);
40           that.outputs = []; //清空接收數據
41           for (var i = 0; i < ws.length; i++) {
42             var sheetData = {
43               // 鍵名為綁定 el 表格的關鍵字,值則是 ws[i][對應表頭名]
44               id: ws[i]["id"],
45               stuNumber: ws[i]["學號"],
46               stuName: ws[i]["姓名"],
47               sex: ws[i]["性別"],
48               tel: ws[i]["電話"],
49               xueyuan: ws[i]["學院"],
50               banji: ws[i]["班級"],
51               lyNumber: ws[i]["樓宇號"],
52               sushe: ws[i]["宿舍號"]
53             };
54             that.studentlist.unshift(sheetData);
55           }
56           this.$refs.upload.value = "";
57         } catch (e) {
58           return false;
59         }
60       };
61       // 如果為原生 input 則應是 files[0]
62       fileReader.readAsBinaryString(files.raw);
63     },

 

此時導入的功能就結束了,下面開始實現導出的功能

第一步,在template標簽中寫入導出的按鈕,並綁定單擊事件,代碼如下:

<el-button type="warning" icon="el-icon-download" @click="exportToExcel">批量導出</el-button>

第二步:在methods{}方法中寫對應的方法

 1 // ----------以下為導出Excel數據功能--------------
 2     exportToExcel() {
 3       //excel數據導出
 4       require.ensure([], () => {
 5         const { export_json_to_excel } = require("../../excel/Export2Excel");
 6         const tHeader = [
 7           "id",
 8           "學號",
 9           "姓名",
10           "性別",
11           "聯系電話",
12           "宿舍號",
13           "學院",
14           "班級",
15           "樓宇號"
16         ];
17         const filterVal = [
18           "id",
19           "stuNumber",
20           "stuName",
21           "sex",
22           "tel",
23           "sushe",
24           "xueyuan",
25           "banji",
26           "lyNumber"
27         ];
28         const list = this.studentlist;
29         const data = this.formatJson(filterVal, list);
30         export_json_to_excel(tHeader, data, "學生列表excel");
31       });
32     },
33     formatJson(filterVal, jsonData) {
34       return jsonData.map(v => filterVal.map(j => v[j]));
35     },

https://www.bilibili.com/video/BV1H7411N7Qq/?spm_id_from=333.788.videocard.0

https://github.com/liyaxu123/-Vue-ElementUi-NodeJS-Mysql-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM