1、引入工具
SheetJS官网
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.19.2/package/dist/xlsx.full.min.js"></script>
2、按钮及表格
<el-upload class="upload" action="" :multiple="false" :show-file-list="false" accept=".xlsx"
:http-request="importData">
<el-button type="primary">批量导入</el-button>
</el-upload>
<el-button @click="exportData">批量导出</el-button>
<el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%" height="860"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55">
</el-table-column>
<el-table-column prop="imgUrl" label="图片地址">
</el-table-column>
<el-table-column prop="imgUrl" label="图片展示">
<template slot-scope="scope">
<img :src="scope.row.imgUrl" style="width: 200px;height:200px;" />
</template>
</el-table-column>
<el-table-column prop="remark" label="备注">
</el-table-column>
</el-table>
3、批量导入
importData(e) {
let file = e.file
if (!file) {
return false
} else if (!/\.(xls|xlsx)$/.test(file.name.toLowerCase())) {
this.$message.error('上传格式不正确,请上传xls或者xlsx格式')
return false
}
const fileReader = new FileReader()
fileReader.onload = (ev) => {
try {
const data = ev.target.result
const workbook = XLSX.read(data, {
type: 'binary'
})
const exlname = workbook.SheetNames[0]
const exl = XLSX.utils.sheet_to_json(workbook.Sheets[exlname])
this.tableData = exl
} catch (e) {
console.log('出错了::')
return false
}
}
fileReader.readAsBinaryString(file)
},
4、批量导出
handleSelectionChange(val) {
this.selectedData = val;
},
async exportData() {
const rows = this.selectedData;
const worksheet = XLSX.utils.json_to_sheet(rows);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "Dates");
XLSX.utils.sheet_add_aoa(worksheet, [["imgUrl", "remark"]], { origin: "A1" });
const max_width = rows.reduce((w, r) => Math.max(w, r.remark.length), 10);
worksheet["!cols"] = [{ wch: max_width }];
XLSX.writeFile(workbook, "imgUrlExport.xlsx", { compression: true });
}