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