使用js-xlsx库,将表格table导出为Excel表格

布满荆棘的人生 2022-02-01 12:25 1052阅读 0赞
  1. npm install xlsjs

引入xlsx.full.min.js 和export.js

  1. <body>
  2. <button onclick="tableExport()">导出</button>
  3. <table id="tables">
  4. <thead>
  5. <tr>
  6. <th>姓名</th>
  7. <th>学号</th>
  8. </tr>
  9. </thead>
  10. <tbody>
  11. <tr>
  12. <td>张三</td>
  13. <td>123456789</td>
  14. </tr>
  15. <tr>
  16. <td>李四</td>
  17. <td>123456788</td>
  18. </tr>
  19. </tbody>
  20. <tr>
  21. <td>王五</td>
  22. <td>123456787</td>
  23. </tr>
  24. </table>
  25. <script src="../assets/js/xlsx.full.min.js"></script>
  26. <script src="../assets/js/export.js"></script>
  27. <script type="text/javascript">
  28. function tableExport() {
  29. btn_export("tables","table导出表格")
  30. }
  31. function btn_export(id,filename) {
  32. let table1 = document.getElementById(id);
  33. let sheet = XLSX.utils.table_to_sheet(table1);//将一个table对象转换成一个sheet对象
  34. openDownloadDialog(sheet2blob(sheet), filename+'.xlsx');
  35. }
  36. </script>
  37. </body>

export.js

  1. // 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
  2. function sheet2blob(sheet, sheetName) {
  3. sheetName = sheetName || 'sheet1';
  4. let workbook = {
  5. SheetNames: [sheetName],
  6. Sheets: {}
  7. };
  8. workbook.Sheets[sheetName] = sheet; // 生成excel的配置项
  9. let wopts = {
  10. bookType: 'xlsx', // 要生成的文件类型
  11. bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
  12. type: 'binary'
  13. };
  14. let wbout = XLSX.write(workbook, wopts);
  15. let blob = new Blob([s2ab(wbout)], {
  16. type: "application/octet-stream"
  17. }); // 字符串转ArrayBuffer
  18. function s2ab(s) {
  19. let buf = new ArrayBuffer(s.length);
  20. let view = new Uint8Array(buf);
  21. for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  22. return buf;
  23. }
  24. return blob;
  25. }
  26. function openDownloadDialog(url, saveName) {
  27. if (typeof url == 'object' && url instanceof Blob) {
  28. url = URL.createObjectURL(url); // 创建blob地址
  29. }
  30. let aLink = document.createElement('a');
  31. aLink.href = url;
  32. aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
  33. let event;
  34. if (window.MouseEvent) event = new MouseEvent('click');
  35. else {
  36. event = document.createEvent('MouseEvents');
  37. event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  38. }
  39. aLink.dispatchEvent(event);
  40. }

效果:

20190514151516565.png

20190514151531683.png

发表评论

表情:
评论列表 (有 1 条评论,1052人围观)
蒲公英云AFBA53
蒲公英云AFBA53V铁粉 2022-09-23 10:23
博主,您好,我想请教一下导出Execl表格,宽度自适应应该如何处理?

相关阅读