vue.js filter+匯出xlsx
by cactus77kiki
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.8/xlsx.full.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js"></script>
<div id="vapp">
<h3>Vue.js - 資料filter 、 下載xlsx(json to xlsx,多個工作表)</h3>
請輸入關鍵字:<input type="text" v-model.trim="dfilter"/>
<button type="button" v-on:click="exportxls">輸出excel</button><br/>
<span>(目前資料共:{{flist.length}}筆)</span>
<ul>
<li v-for="(row,index) in flist">
({{index+1}}){{row.name}} - {{row.email}}
</li>
</ul>
</div>
JavaScript
/*
範例: json資料下載excel改寫為元件參考: https://jsfiddle.net/cactus77kiki/rz31edgq/
other excel export library: https://github.com/jecovier/vue-json-excel/issues/57 (myexcel)
ref: https://github.com/SheetJS/sheetjs/issues/817
*/
var app = new Vue({
el:'#vapp',
data:{
dlist:[],
dfilter:""
},
methods:{
getdata:function(){
var self = this;
axios.get('https://jsonplaceholder.typicode.com/comments/')
.then(function (response) {
self.dlist=response.data;
//console.log(response.data);
})
.catch(function (error) {
console.log(error);
});
},
exportxls: function(){
var filename = 'download.xlsx'; //檔名
//var data = this.flist ;
//var sheetname = 'test'; //表名
//downloadxlsx(filename, sheetname, data); //下載
expdatalist.push({data: this.flist, sheetname: 'test1'});
expdatalist.push({data: this.dlist, sheetname: 'test2'});
//downloadxlsx(filename);
downloadxlsx(filename);
}
},
computed:{
flist: function(){
//app.dfilter: callback function內,this.xxx代表此function
if(this.dfilter != ""){
var arry = this.dlist.filter(function(item){
return (item.name.indexOf(app.dfilter)>-1 || item.email.indexOf(app.dfilter)>-1);
});
return arry;
}else{
return this.dlist;
}
}
},
created:function(){
this.getdata();
}
});
//import xlsx(-20200219-)
//export xlsx data object(參考使用)
var dataobj = {
data: [], //data
sheetname: "" //xlsx sheet name
}
var expdatalist = [];
//export xlsx
/*function downloadxlsx(filename, sheetname, data) {
return export_json_to_excel(data, filename,sheetname);
}*/
function downloadxlsx(filename){
filename = filename || "downloads.xlsx"; //預設值
return export_json_to_excel(filename);
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i=0;...