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>