<template>
<div style="display:inline-block;vertical-align: middle;">
<Button
type="primary"
size="small"
style="float:right"
:disabled='!options.data.length'
@click="_export"
>谬误导出</Button>
</div>
</template>
<script>
import XLSX from "xlsx";
import "xlsx/dist/xlsx.full.min.js";
import saveAs from "file-saver/FileSaver.min.js";
export default {
data() {
return {
modal: {
isShow: false
},
limitNumber: 30000, // 单个excel下限数据量
totalCount: 0,
exportArr: [],
changeObj: {}
};
},
methods: {
_export() {
let returnArr = [];
let columns = this.options.columns;
let data = this.options.data;
let tempArr = [];
columns.forEach(item => tempArr.push(item.label));
returnArr.push(tempArr);
data.forEach(item => {
let keyArr = [];
columns.forEach(col => keyArr.push(item[col.prop]));
returnArr.push(keyArr);
});
const wopts = { bookType: 'xlsx', bookSST: false, type: 'binary' };
const wb = { SheetNames: ['Sheet1'], Sheets: {}, Props: {} };
let objName = this.options.name ? this.options.name : "数据导出";
// wb.Sheets["Sheet1"] = XLSX.utils.json_to_sheet(returnArr);
wb.Sheets['Sheet1'] = XLSX.utils.aoa_to_sheet(returnArr);
saveAs.saveAs(
new Blob([s2ab(XLSX.write(wb, wopts))], {
type: "application/octet-stream"
}),
objName + "." + (wopts.bookType == "biff2" ? "xls" : wopts.bookType)
);
function s2ab(s) {
if (typeof ArrayBuffer !== "undefined") {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
return buf;
} else {
var buf = new Array(s.length);
for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xff;
return buf;
}
}
}
},
props: ["options"]
};
</script>
发表回复