超级码丽. 2024-02-04 15:43 采纳率: 26.7%
浏览 495

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

这列数据看起来好挤

img

想要两个自动

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

比如:

img

  • 写回答

3条回答

  • 超级码丽. 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日