XLSX.utils.json_to_sheet导出excel

 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

相关文章
相关标签/搜索