在讀取.xlsx文件的時候,需要引入xlsx.core.min.js;
<script type="text/javascript" src="./xlsx.core.min.js"></script>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div class="uploadFile border_bg"> <form action="" method="post" id="formToUpdate"> <div class="form-group"> <label ><strong>Import from csv</strong></label> <input type="file" name="uploadCSV" id="upCsv"> <input id="ajaxSubmit" type="button" value="upload CSV" class="btn"> </div> </form> </div> </body> <script type="text/javascript" src="./jquery-1.11.3.min.js"></script> <script type="text/javascript" src="./xlsx.core.min.js"></script> <script> $("#ajaxSubmit").click(function(e) { var sum = 0; var fileType = $('#upCsv').val().split('.'); var files = document.getElementById("upCsv").files; var name = files[0] ? files[0].name : ''; $("#ajaxSubmit").attr("disabled","disabled"); // 判斷上傳的文件類型 if((fileType[fileType.length-1]) === 'csv' || (fileType[fileType.length-1]) === 'CSV'){ var data = []; var files = document.getElementById("upCsv").files; if(files.length) { var file = files[0]; var reader = new FileReader(); //new一個FileReader實例 if(typeof FileReader == 'undefined') { alert("你的瀏覽器暫不支持該功能", {title: "提示", skin: "layui-layer-molv"}); file.setAttribute("disabled", "disabled"); return; } reader.readAsText(file); reader.onload = function() { var num = null; var relArr = this.result.split("\r\n"); if(!$.isEmptyObject(relArr) && relArr.length > 1) { for(var key = 0; key < relArr.length; key++) { var values = relArr[key]; if(!$.isEmptyObject(values)) { var objArr = values.split(","); data.push(objArr); } } } // 判斷“應付返利金額”是表頭的第幾個 for(var key = 0; key < data[0].length; key++){ if(data[0][key]==="應付返利金額"){ num = key } } // 這里做了一個讀取表頭為“應付返利金額”的數值的和 for(var key=1; key < data.length; key++){ sum += parseFloat(data[key][num]) } myAjax((Math.round(sum*100))/100,name); console.log((Math.round(sum*100))/100,name); // 將算出來的和和文件名稱傳給后端 $("#ajaxSubmit").removeAttr("disabled"); } } }else if((fileType[fileType.length-1]) === 'xlsx' || (fileType[fileType.length-1]) === 'XLSX'){ var fileReader = new FileReader(); fileReader.onload = function(ev) { try { var data = ev.target.result, workbook = XLSX.read(data, { type: 'binary' }), // 以二進制流方式讀取得到整份excel表格對象 persons = []; // 存儲獲取到的數據 } catch (e) { alert('文件類型不正確'); return; } // 表格的表格范圍,可用於判斷表頭是否數量是否正確 var fromTo = ''; // 遍歷每張表讀取 for (var sheet in workbook.Sheets) { if (workbook.Sheets.hasOwnProperty(sheet)) { fromTo = workbook.Sheets[sheet]['!ref']; persons = persons.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet])); break; // 如果只取第一張表,就取消注釋這行 } } // 這里做了一個讀取表頭為“應付返利金額”的數值的和 for(var key=0; key<persons.length; key++){ var onePrice = persons[key]["應付返利金額"] sum += onePrice; } console.log((Math.round(sum*100))/100); // 將算出來的和和文件名稱傳給后端 myAjax((Math.round(sum*100))/100,name); $("#ajaxSubmit").removeAttr("disabled"); }; // 以二進制方式打開文件 fileReader.readAsBinaryString(files[0]); }else{ alert("請上傳.csv或.xlsx文件"); $("#ajaxSubmit").removeAttr("disabled"); } // 給后端“應付返利金額”的數值的和,文件名的ajax function myAjax(sum,name){ console.log(sum,name) // $.ajax({ // type: "post", // url: "路徑", // data: { // sum, // name // }, // dataType: "json", // success: function(data){ // console.log(data) // } // }); } }) </script> </html>