自己在別人基礎上,臨時修改的代碼,
<html> <head> <title>JS-XLSX Live Demo</title> <style> #drop { border: 2px dashed #bbb; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; padding: 25px; text-align: center; font: 20pt bold,"Vollkorn"; color: #bbb } #b64data { width: 100%; } a { text-decoration: none } button { } </style> <script type="text/javascript" src="dist/xlsx.full.min.js"></script> <script type="text/javascript" src="dist/xlsx.core.min.js"></script> <script type="text/javascript" src="dist/jquery.min.js"></script> </head> <body> <pre> <input type="file" name="xlfile" id="xlf" onchange="importf(this)"> </pre> <pre id="out"></pre> <br> <div id="demo"></div> <script> /* FileReader共有4種讀取方法: 1.readAsArrayBuffer(file):將文件讀取爲ArrayBuffer。 2.readAsBinaryString(file):將文件讀取爲二進制字符串 3.readAsDataURL(file):將文件讀取爲Data URL 4.readAsText(file, [encoding]):將文件讀取爲文本,encoding缺省值爲'UTF-8' */ var workbook;//讀取完成的數據 var rABS = false; //是否將文件讀取爲二進制字符串 function importf(obj) {//導入 debugger; if (!obj.files) { return; } var f = obj.files[0]; var reader = new FileReader(); reader.onload = function (e) { var data = e.target.result; if (rABS) { workbook = XLSX.read(btoa(fixdata(data)), {//手動轉化 type: 'base64' }); } else { workbook = XLSX.read(data, { type: 'binary' }); } // 循環頁籤取數 console.log("頁籤數量:" + workbook.SheetNames.length); var showHtml = ""; for (var sheetNum = 0; sheetNum < Number(workbook.SheetNames.length); sheetNum++) { var first_sheet_name = workbook.SheetNames[sheetNum]; // 獲取工作簿中的工作表名字 console.log("workbook.SheetNames[0]" + first_sheet_name) var address_of_cell = 'B1'; // 提供一個引用樣式(單元格下標) var address_of_cell2 = 'B2'; // 提供一個引用樣式(單元格下標) var worksheet = workbook.Sheets[first_sheet_name]; // 獲取對應的工作表對象 // console.log(worksheet['!ref']) // 獲得該excel的內容範圍 例如: A1:F30 var scope = worksheet['!ref']; if (scope == undefined) { console.log("文件格式有誤!") showHtml = showHtml + first_sheet_name + "頁籤解析有誤,請檢查格式是否正確! <br />" break; } else { showHtml = showHtml + first_sheet_name + "頁籤已解析完成 <br />" } // js截取某個字符串後面的內容: scope = scope.match(/:(\S*)/)[1]; // 獲取表格邊界 例如:F30 console.log(scope); var reg = /[A-Z]/g; char_scope = scope.match(reg); // console.log("===========" + char_scope); // 用正則去除字符串種的數字,獲取表格邊界字母值 例如:F var scopeLetter = scope.replace(/\d+/g, ''); console.log("=====ssss======" +scopeLetter); // 用正則將非數字的去除,獲取表格邊界行值 例如:30 var scopeNum = scope.replace(/[^0-9]/ig, ""); // console.log(Number(scopeNum)+1); // 表名稱 var tableName = ""; // 表註釋 var tableNameNote = ""; // 創建表結構的字符串 var tableSql = "create table "; // 創建表字段註釋字符串 var tableNote = ""; // 創建表的主鍵字符串 var tablePk = ""; // // 循環獲取數據 for (var num = 1; num < Number(scopeNum) + 1; num++) { // 循環邊界行值 var isNull = "";// 是否爲空 var def = ""; // 默認值 for (var i = 0; i < 26; i++) {// 循環邊界字母值 var letters = String.fromCharCode(65 + i); // 字母 console.log(String.fromCharCode(65+i)+num);//輸出A-Z 26個大寫字母 var address_cell = String.fromCharCode(65 + i) + num; // 提供一個引用樣式(單元格下標) var desired_cell = worksheet[address_cell];// 獲取對應的單元格對象 var desired_value = (desired_cell ? desired_cell.v : undefined);// 獲取對應的單元格對象的值 console.log(desired_value) // 表結構字符串 } } console.log(tableSql); console.log(tableNote); console.log(tablePk); //function download(filename, text) { // var element = document.createElement('a'); // element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); // element.setAttribute('download', filename); // element.style.display = 'none'; // document.body.appendChild(element); // element.click(); // document.body.removeChild(element); //} //download(first_sheet_name + ".sql", tableSql + "\n" + tableNote + "\n" + tablePk); } document.getElementById("demo").innerHTML = showHtml; }; if (rABS) { reader.readAsArrayBuffer(f); } else { reader.readAsBinaryString(f); } } function fixdata(data) { //文件流轉BinaryString var o = "", l = 0, w = 10240; for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))); o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w))); return o; } </script> </body> </html>