├── README.md ├── js └── export.js └── index.html /README.md: -------------------------------------------------------------------------------- 1 | # js-xlsx-demo 2 | 一个xlsx的使用demo,针对table元素,直接进行导出excel 3 | 原文链接[https://blog.csdn.net/tian_i/article/details/84327329] 4 | -------------------------------------------------------------------------------- /js/export.js: -------------------------------------------------------------------------------- 1 | // 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载 2 | function sheet2blob(sheet, sheetName) { 3 | sheetName = sheetName || 'sheet1'; 4 | var workbook = { 5 | SheetNames: [sheetName], 6 | Sheets: {} 7 | }; 8 | workbook.Sheets[sheetName] = sheet; // 生成excel的配置项 9 | 10 | var wopts = { 11 | bookType: 'xlsx', // 要生成的文件类型 12 | bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性 13 | type: 'binary' 14 | }; 15 | var wbout = XLSX.write(workbook, wopts); 16 | var blob = new Blob([s2ab(wbout)], { 17 | type: "application/octet-stream" 18 | }); // 字符串转ArrayBuffer 19 | function s2ab(s) { 20 | var buf = new ArrayBuffer(s.length); 21 | var view = new Uint8Array(buf); 22 | for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 23 | return buf; 24 | } 25 | return blob; 26 | } 27 | 28 | function openDownloadDialog(url, saveName) { 29 | if (typeof url == 'object' && url instanceof Blob) { 30 | url = URL.createObjectURL(url); // 创建blob地址 31 | } 32 | var aLink = document.createElement('a'); 33 | aLink.href = url; 34 | aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效 35 | var event; 36 | if (window.MouseEvent) event = new MouseEvent('click'); 37 | else { 38 | event = document.createEvent('MouseEvents'); 39 | event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 40 | } 41 | aLink.dispatchEvent(event); 42 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 || 序号 | 16 |姓名 | 17 |年龄 | 18 |兴趣 | 19 |身份证号 | 20 |手机号 | 21 |
| 1 | 26 |张三 | 27 |18 | 28 |打游戏 | 29 |320322184087562589 | 30 |1374569821 | 31 |
| 2 | 34 |李四 | 35 |88 | 36 |看电影 | 37 |420322184087562589 | 38 |2374569821 | 39 |
| 3 | 42 |王五 | 43 |81 | 44 |睡觉 | 45 |520322184087562589 | 46 |3374569821 | 47 |
| 这是一个合并单元格 | 50 ||||||