- 下载模版
注:模版保存在静态资源下 如:/static/file/test.xlsx
<el-button type="text" icon="el-icon-download" @click="onDownload">模版下载</el-button>
//下载模版
onDownload(){
window.location.href = '/static/file/test.xlsx'
}
- 导入
注:导入excel文件,并且解析内容渲染在el-table上
安装 file-saver和xlsx插件
npm install file-saver xlsx -S
main.js中引入依赖
import XLSX from 'xlsx'
Vue.use(XLSX)
<el-upload
action=""
:multiple="false"
:show-file-list="false"
:http-request="httpRequest"
accept="csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
<el-button type="text" size="small" icon="el-icon-download">导入</el-button>
</el-upload>
httpRequest(e) {
var _this = this;
var rABS = false; //是否将文件读取为二进制字符串
let f = e.file // 文件信息
if(!f) return false;
else if(!/\.(xls|xlsx)$/.test(f.name.toLowerCase())) {
this.$message.error('上传格式不正确,请上传xls或者xlsx格式')
return false
}
var reader = new FileReader();
FileReader.prototype.readAsBinaryString = function(f) {
var binary = "";
var rABS = false; //是否将文件读取为二进制字符串
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]], {
defval: ''}); //outdata的格式可打印了自行查看
// 以下是对outdata的格式化,可按个人需要自行转换成渲染table需要的数据
outdata.map((p, idx)=> {
// ...
})
}
reader.readAsArrayBuffer(f);
}
if(rABS) reader.readAsArrayBuffer(f);
else reader.readAsBinaryString(f);
},
- 导出
注:对已知数组对象类型的数据进行导出excel (下图是点击图标,进行导出日志)
安装依赖
npm install -S file-saver
npm install -S xlsx
npm install -D script-loader
下载导入Blob.js和 Export2Excel.js(文章最后可直接复制使用)
<el-table-column prop="log" label="日志" align="center">
<template slot-scope="scope">
<el-tooltip effect="dark" :content="logtip" placement="right" :visible-arrow="false">
<img src="@/assets/image/icon-log.svg" class="icon_log" @click.prevent="onDownloadLog(scope.row)" />
</el-tooltip>
</template>
</el-table-column>
onDownloadLog(row){
let params = {
rule_id: row.id,
size: 15