如何在exceljs中自动调整列宽

5 javascript excel typescript exceljs

我必须使用exceljs. 我的 excel 必须是动态的,并且只在 Excel 中保存用户将在请求中提供的列。对于这种情况,我提供了以下语法:

workSheet.getRow(1).values = dto.columns;
Run Code Online (Sandbox Code Playgroud)

将列名保存在第一行,名称在dto.columns.

但我必须为每一列设置宽度,我试试这个:

for(let i=0; i <= dto.columns.length-1; i++) {
            workSheet.columns = [
                {key: dto.columns[i], width: Object.keys(dto.columns[i]).length}
            ]
        }
Run Code Online (Sandbox Code Playgroud)

但这对我没有任何影响:

有人能告诉我如何autosize为这个问题创建一个函数吗?

谢谢你的帮助

Ash*_*h S 12

您迭代单元格并以这种方式检查每个单元格的长度

    worksheet.columns.forEach(function (column, i) {
        var maxLength = 0;
        column["eachCell"]({ includeEmpty: true }, function (cell) {
            var columnLength = cell.value ? cell.value.toString().length : 10;
            if (columnLength > maxLength ) {
                maxLength = columnLength;
            }
        });
        column.width = maxLength < 10 ? 10 : maxLength;
    });
Run Code Online (Sandbox Code Playgroud)


小智 10

它对我有用,你可以这样做:

private AdjustColumnWidth(worksheet) {
  worksheet.columns.forEach(column => {
    const lengths = column.values.map(v => v.toString().length);
    const maxLength = Math.max(...lengths.filter(v => typeof v === 'number'));
    column.width = maxLength;
  });
}
Run Code Online (Sandbox Code Playgroud)

  • 我发现这效果很好,并且比其他选项更简洁。基于我使用“autoFilter”的事实添加一点填充并考虑标题的宽度使其变得非常完美:“column.width = Math.max(Math.max(...lengths.filter(v =&gt;) typeof v === '数字')) + 2, column.header.length + 6);` (2认同)