vue項目-插件xlsx的使用,導入表格數據的處理
背景:有個項目表單數據字段過多,為了方便快速添入數據需要將表格中的數據導入至表單中,記錄下來,方便以后查看。
所用插件:xlsx
一、裝包 npm install xlsx --save
二、封裝插件
<template>
<div>
<input
class="input-file"
type="file"
accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
@change="exportData"
>
<button @click="btnClick">導入參數</button>
</div>
</template>
<script>
import XLSX from 'xlsx';
export default {
name: 'InputExcel',
props: {
accept: {
type: String,
default: '選擇excel文件'
}
},
methods: {
btnClick() {
document.querySelector('.input-file').click();
},
exportData(event) {
if (!event.currentTarget.files.length) {
return;
}
const that = this;
// 拿取文件對象
var f = event.currentTarget.files[0];
// 用FileReader來讀取
var reader = new FileReader();
// 重寫FileReader上的readAsBinaryString方法
FileReader.prototype.readAsBinaryString = function(f) {
var binary = '';
var wb; // 讀取完成的數據
var outdata; // 你需要的數據
var reader = new FileReader();
reader.onload = function(e) {
// 讀取成Uint8Array,再轉換為Unicode編碼(Unicode占兩個字節)
var bytes = new Uint8Array(reader.result);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
// 接下來就是xlsx了,具體可看api
wb = XLSX.read(binary, {
type: 'binary'
});
outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
// 自定義方法向父組件傳遞數據
that.$emit('getResult', outdata);
};
reader.readAsArrayBuffer(f);
};
reader.readAsBinaryString(f);
}
}
};
</script>
<style scoped>
.input-file {
display: none;
}
</style>
三、頁面中引用剛封裝的xlsx組件
<template>
<div>
<xlsx @getResult="getMyExcelData">導入參數</xlsx>
</div>
</template>
<script>
import xlsx from '@/components/xlsx/xlsx';
export default {
components: {
xlsx
},
methods:{
getMyExcelData(data) {
// 處理你的數據
console.log(data);
}
}
</script>
