vue项目-插件xlsx的使用,导入表格数据的处理——写成可引用的组件(封装组件)
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>