• vue3+elementUiPlus表格导出功能


    1.下载需要的组件包

    npm install file-saver xlsx

    2.页面中导入

    import FileSaver from 'file-saver'
    import * as XLSX from 'xlsx';

     3.页面中的表格加一个id

    <el-table
            :data="tableData"
            ref="multipleTableRef"
            style="width: 100%"
    id="my-table">

            为了方法连接

    4. 导出按钮

    导出

     5.导出方法

    1. const exportClick = () => {
    2. var table = document.querySelector('#my-table');
    3. // 复制表格,不包括第一列和最后一列
    4. var clonedTable = table.cloneNode(true);
    5. clonedTable.querySelectorAll('tr').forEach(row => {
    6. var cells = row.cells;
    7. if (cells.length > 0) {
    8. // 删除每行的第一个单元格
    9. row.deleteCell(0);
    10. // 删除每行的最后一个单元格
    11. row.deleteCell(cells.length - 1);
    12. }
    13. });
    14. // 创建一个新的工作簿
    15. var wb = XLSX.utils.book_new();
    16. // 创建一个新的工作表
    17. var ws = XLSX.utils.table_to_sheet(clonedTable);
    18. // 调整每列的列宽以适应内容
    19. autoSizeColumns(ws);
    20. // 将工作表添加到工作簿中
    21. XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
    22. // 导出工作簿
    23. const wbout = XLSX.write(wb, {
    24. bookType: 'xlsx',
    25. bookSST: true,
    26. type: 'binary',
    27. cellStyles: true, // 启用单元格样式
    28. });
    29. try {
    30. FileSaver.saveAs(new Blob([s2ab(wbout)], { type: 'application/octet-stream' }), '客户表.xlsx');
    31. } catch (e) {
    32. if (typeof console !== 'undefined') console.log(e, wbout);
    33. }
    34. };

    6.将字符串转为数组

    1. // 将字符串转换为字节数组
    2. function s2ab(s) {
    3. const buf = new ArrayBuffer(s.length);
    4. const view = new Uint8Array(buf);
    5. for (let i = 0; i < s.length; i++) {
    6. view[i] = s.charCodeAt(i) & 0xFF;
    7. }
    8. return buf;
    9. }

    7.计算最大列宽

    1. function autoSizeColumns(ws) {
    2. const range = XLSX.utils.decode_range(ws['!ref']);
    3. for (let C = range.s.c; C <= range.e.c; ++C) {
    4. let maxColWidth = 0;
    5. for (let R = range.s.r; R <= range.e.r; ++R) {
    6. const cellAddress = { c: C, r: R };
    7. const cellRef = XLSX.utils.encode_cell(cellAddress);
    8. const cell = ws[cellRef];
    9. if (cell && cell.v) {
    10. const cellText = cell.w || cell.v.toString();
    11. const cellWidth = cellText.length + 2; // 加 2 以适应列头和数据
    12. if (cellWidth > maxColWidth) {
    13. maxColWidth = cellWidth;
    14. }
    15. }
    16. }
    17. const colWidth = maxColWidth > 20 ? maxColWidth : 20; // 设置最小列宽
    18. const col = ws['!cols'][C];
    19. if (col) {
    20. col.wch = colWidth;
    21. } else {
    22. ws['!cols'][C] = { wch: colWidth };
    23. }
    24. }
    25. }

  • 相关阅读:
    限时开源,来自大佬汇总的Kafka限量笔记,绝对不会后悔!
    零基础小白,照样也可以成为年薪15W+的网络安全工程师!
    day44
    C语言指针重点
    原生JS中的Ajax
    业务级灾备架构设计
    jetCache整合本地、远程缓存使用redis
    【单元测试】--测试驱动开发(TDD)
    C++学习第六课--string类型操作笔记
    [晕事]今天做了件晕事31, gre 抓到半边
  • 原文地址:https://blog.csdn.net/LB_bei/article/details/133144019