經過兩天的摸索,始終沒有找到合適方法,解決上傳的問題,最后在大佬的指導下完成(非常感謝)
首先下載官方擴展插件,在layui-excel/layui_exts/里面的excel.js和excel.min.js兩個文件
https://fly.layui.com/extend/excel/
其次在HTML界面引入js文件,layui_exts文件夾在webapp直接目錄下
<script type="text/javascript"> layui.config({ base: '/layui_exts/' }).extend({ excel: 'excel' }); </script>
按鈕代碼
<button class="layui-btn layui-btn-sm" style="background-color: #10A9FF;" id="importExcel"> <i class="layui-icon"></i>上傳文件 </button>
然后進行上傳操作
<script> layui.use(['table','jquery','layer','upload','excel'],function () { var table = layui.table , $ = layui.jquery , layer = layui.layer , upload = layui.upload , excel = layui.excel ; //upload上傳實例 var uploadInst = upload.render({ elem: '#importExcel' //綁定元素 , url: '/upload/' //上傳接口(PS:這里不用傳遞整個 excel) , auto: false //選擇文件后不自動上傳 , accept: 'file' , choose: function (obj) {// 選擇文件回調 //console.debug(obj) var files = obj.pushFile() var fileArr = Object.values(files)// 注意這里的數據需要是數組,所以需要轉換一下 //console.debug(fileArr) // 用完就清理掉,避免多次選中相同文件時出現問題 for (var index in files) { if (files.hasOwnProperty(index)) { delete files[index] } } uploadExcel(fileArr) // 如果只需要最新選擇的文件,可以這樣寫: uploadExcel([files.pop()]) } }) /** * 上傳excel的處理函數,傳入文件對象數組 * @param {[type]} files [description] * @return {[type]} [description] */ function uploadExcel(files) { try { excel.importExcel(files, { // 讀取數據的同時梳理數據 fields: { 'vmNo': 'A' ,'vmAL': 'B' ,'vmName': 'C' ,'vmExp': 'D' ,'vmStartDate': 'E' ,'vmEndDate': 'F' ,'vmNum': 'G' ,'vmPer': 'H' } }, function (data) { // console.debug(data); $.each(data, function (index, obj) { // console.debug(obj) // console.debug(obj.Sheet1) $.each(obj.Sheet1, function (index, object){ console.log(object); var vmNo=object.vmNo; var vmAL=object.vmAL; var vmName=object.vmName; var vmExp=object.vmExp; var vmStartDate=object.vmStartDate; var vmEndDate=object.vmEndDate; var vmNum=object.vmNum; var vmPer=object.vmPer; console.log(object.vmEndDate); if(vmNo=="編號"){ }else { $.ajax({ // async: false, url: 'addVM',//產品型號下拉框 type: 'post', // dataType: "json", // contentType: "application/json", data: { vmNo: vmNo, vmAL: vmAL, vmName: vmName, vmExp: vmExp, vmStartDate: vmStartDate, vmEndDate: vmEndDate, vmNum: vmNum, vmPer: vmPer }, success: function (data) { layer.msg('上傳成功'); table.reload('test',{ url:"findAllVM" }) }, error: function (msg) { layer.msg('請聯系管理員!!!'); } }); } }) }); // 如果不需要展示直接上傳,可以再次 $.ajax() 將JSON數據通過 JSON.stringify() 處理后傳遞到后端即可 /*layer.open({ title: '文件轉換結果' , area: ['800px', '400px'] , offset: ['100px', '100px'] , tipsMore: true , content: laytpl($('#LAY-excel-export-ans').html()).render({data: data, files: files}) , success: function () { // element.render('tab') code({}) } })*/ }) } catch (e) { layer.alert(e.message) } } }); </script>
如果需要先對數據進行檢驗,可以把彈出層的代碼解開並加上相關的代碼,如下
<script type="text/html" id="LAY-excel-export-ans"> {{# layui.each(d.data, function(file_index, item){ }} <blockquote class="layui-elem-quote">{{d.files[file_index].name}}</blockquote> <div class="layui-tab"> <ul class="layui-tab-title"> {{# layui.each(item, function(sheet_name, content) { }} <li>{{sheet_name}}</li> {{# }); }} </ul> <div class="layui-tab-content"> {{# layui.each(item, function(sheet_name, content) { }} <div class="layui-tab-item"> <table class="layui-table"> {{# layui.each(content, function(row_index, value) { }} {{# var col_index = 0 }} <tr> {{# layui.each(value, function(col_key, val) { }} <td id="table-export-{{file_index}}-{{sheet_name}}-{{row_index}}-{{col_index++}}">{{val}}</td> {{# });}} </tr> {{# });}} </table> <pre class="layui-code">{{JSON.stringify(content, null, 2)}}</pre> </div> {{# }); }} </div> </div> {{# }) }} </script>