首先表格導出需要使用到js-xlsx庫,vue通過npm install xlsx安裝后使用important XLSX from 'xlsx'導入
代碼片段:
----------------html------------------------------
<el-button class="btn" type="primary" @click="onExport">導出</el-button>
<
el-table
ref="filterTable" @row-click="rowClickHandle" :data="tableData.slice((currentPage - 1) * pageSize, currentPage * pageSize)" //數據分頁顯示
>
<el-table-column show-overflow-tooltip prop="name" label="名稱" ></el-table-column> <el-table-column show-overflow-tooltip prop="address" label="地址" ></el-table-column> <el-table-column show-overflow-tooltip label="狀態"> <template slot-scope="scope"> <span v-if="scope.row.statu == 0">待完成</span> <span v-if="scope.row.statu == 1">已完成</span> </template> </el-table-column> <el-table-column show-overflow-tooltip label="操作" v-if="oprationShow" > <template slot-scope="scope"> <span style="cursor: pointer" @click.stop="edit(scope)" >編輯</span> <span style="cursor: pointer" @click.stop="del(scope)" >刪除</span> </template> </el-table-column>
</el-table> <el-pagination layout="total,prev, pager, next" :total="total" :page-size="pageSize" @current-change="changePage" > </el-pagination>
------------------------js--------------------------------
onExport() { this.oprationShow = false //不顯示操作按鈕 this.pageSize = this.total //將表格長度變成數據總長度 this.currentPage = 1 //顯示第一頁 this.$nextTick(function () { let wb = XLSX.utils.table_to_book(this.$refs.filterTable.$el); let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' }); try {
//Blob
對象表示一個不可變、原始數據的類文件對象。它的數據可以按文本或二進制的格式進行讀取,也可以轉換成ReadableStream
來用於數據操作 _global.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), '表格.xlsx') } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) } this.pageSize = 13 //表格長度還原 this.oprationShow = true //顯示操作按鈕 return wbout; }) },
changePage(currentPage){
this.currentPage = currentPage;
},
遇到的問題:
1.js-xlsx方法只能導出表格dom元素所顯示的數據,分頁的數據無法導出
解決方法:將表格在導出時不進行分頁,所有數據都顯示在第一頁
2.表格的操作按鈕不需要導出
解決辦法:將表格導出時隱藏操作按鈕當前列