1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 8 <title>Document</title> 9 <script src="http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js"></script> 10 </head> 11 12 <body> 13 <input type='file' onchange='importDataSource(this)' /> 14 <button onclick="json2Excel()">導出</button> 15 </body> 16 17 </html> 18 19 20 <script> 21 22 var dataSource = null; 23 var fileName = ''; 24 //一、importDataSource() 方法用來獲取json數據 25 function importDataSource(obj) { 26 27 //二、obj.files[0]得到onchange文件,name得到文件名做爲Excel的文件名 28 fileName = obj.files[0].name.split('.')[0]; 29 30 //三、建立FileReader對象,將文件內容讀入內存,經過一些api接口,能夠在主線程中訪問本地文件 31 var reader = new FileReader(); 32 33 //四、readAsText(file) 異步按字符讀取文件內容,結果用字符串形式表示 34 reader.readAsText(obj.files[0]); 35 36 var that = this 37 38 //五、onload事件,當讀取操做成功完成時調用 39 reader.onload = function () { 40 41 //讀取完畢後輸出結果 爲字符串 此時須要轉成json對象 42 that.dataSource = JSON.parse(this.result); 43 console.log(that.dataSource) 44 } 45 } 46 function json2Excel() { 47 var wopts = { 48 bookType: 'xlsx', 49 bookSST: false, 50 type: 'binary' 51 }; 52 var workBook = { 53 SheetNames: ['Sheet1'], 54 Sheets: {}, 55 Props: {} 56 }; 57 //一、XLSX.utils.json_to_sheet(data) 接收一個對象數組並返回一個基於對象關鍵字自動生成的「標題」的工做表,默認的列順序由使用Object.keys的字段的第一次出現肯定 58 //二、將數據放入對象workBook的Sheets中等待輸出 59 workBook.Sheets['Sheet1'] = XLSX.utils.json_to_sheet(dataSource) 60 61 //三、XLSX.write() 開始編寫Excel表格 62 //四、changeData() 將數據處理成須要輸出的格式 63 saveAs(new Blob([changeData(XLSX.write(workBook, wopts))], { type: 'application/octet-stream' })) 64 } 65 function changeData(s) { 66 //若是存在ArrayBuffer對象(es6) 最好採用該對象 67 if (typeof ArrayBuffer !== 'undefined') { 68 69 //一、建立一個字節長度爲s.length的內存區域 70 var buf = new ArrayBuffer(s.length); 71 72 //二、建立一個指向buf的Unit8視圖,開始於字節0,直到緩衝區的末尾 73 var view = new Uint8Array(buf); 74 75 //三、返回指定位置的字符的Unicode編碼 76 for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 77 return buf; 78 79 } else { 80 var buf = new Array(s.length); 81 for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF; 82 return buf; 83 } 84 } 85 function saveAs(obj, fileName) {//固然能夠自定義簡單的下載文件實現方式 86 var tmpa = document.createElement("a"); 87 tmpa.download = fileName ? fileName + '.xlsx' : new Date().getTime() + '.xlsx'; 88 tmpa.href = URL.createObjectURL(obj); //綁定a標籤 89 tmpa.click(); //模擬點擊實現下載 90 91 setTimeout(function () { //延時釋放 92 URL.revokeObjectURL(obj); //用URL.revokeObjectURL()來釋放這個object URL 93 }, 100); 94 95 } 96 </script>
文章抄自https://segmentfault.com/a/1190000014242385?utm_source=tag-newest,僅供我的學習筆記留存!html