美酒没故事° 2024-02-04 15:43 采纳率: 38%
浏览 113

exceljs 导出表格怎么设置列宽自适应表头和表体两个条件自动撑开?

这列数据看起来好挤

img

想要两个自动

  1. 表头比数据宽就按表头
  2. 数据比表头宽就按数据

比如:

img

  • 写回答

2条回答 默认 最新

  • 美酒没故事° 2024-02-05 11:01
    关注

    完美,哈哈哈哈

    img

    export function exportExcel(headers = [], data = [], name = 'excel') {
      // 创建工作簿
      const workbook = new ExcelJS.Workbook()
      // 添加工作表
      const worksheet = workbook.addWorksheet('sheet1')
    
      // 设置表头
      worksheet.columns = headers
    
      const border = {
        top: {
          style: 'thin',
        },
        left: {
          style: 'thin',
        },
        bottom: {
          style: 'thin',
        },
        right: {
          style: 'thin',
        },
      }
    
      // 添加数据
      data.map((row, index) => {
        worksheet.addRow(row)
        worksheet.columns.map((column) => {
          // 表头的样式
          worksheet.getCell(`${column.letter}1`).border = border
          worksheet.getCell(`${column.letter}1`).font = {
            bold: true,
          }
          worksheet.getCell(`${column.letter}1`).fill = {
            type: 'pattern',
            pattern: 'solid',
            fgColor: { argb: 'FF8FBC8F' },
          }
    
          // 列宽自适应
          let width = []
          column.values.map((value) => {
            if (!value) {
              width.push(10)
            } else if (/.*[\u4e00-\u9fa5]+.*$/.test(value)) {
              width.push(parseFloat(value.toString().length * 2.15))
            } else {
              width.push(parseFloat(value.toString().length * 1.15))
            }
          })
          column.width = Math.max(...width)
    
          // 行数据的样式
          worksheet.getCell(`${column.letter}${index + 2}`).border = border
        })
      })
    
      // 导出表格
      // workbook.xlsx.writeFile('测试' + '.xlsx') // 报错
      workbook.xlsx.writeBuffer().then((buffer) => {
        const blob = new Blob([buffer], {
          type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        })
        const link = document.createElement('a')
        link.href = URL.createObjectURL(blob)
        link.download = name + '.xlsx'
        link.click()
        URL.revokeObjectURL(link.href) // 下载完成释放掉blob对象
      })
    }
    
    评论

报告相同问题?

问题事件

  • 修改了问题 2月5日
  • 创建了问题 2月4日

悬赏问题

  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
  • ¥15 SQL Server analysis services 服务安装失败
  • ¥15 用html创建一个个人网页,提供网页页面
  • ¥15 基于面向对象的图书馆借阅管理系统
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥20 centos linux 7.9安装php8.2.18不支持mysqli模块的问题
  • ¥15 stata空间计量LM检验
  • ¥15 关于k8s node节点被释放后如何驱逐节点并添加新节点
  • ¥15 subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1