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

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日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵