美文网首页
使用easypoi时,动态设置excel列宽

使用easypoi时,动态设置excel列宽

作者: fzhyzamt | 来源:发表于2021-05-12 18:29 被阅读0次

    首先需要调用trackAllColumnsForAutoSizing,因为SXSSFSheet会将数据缓冲写入硬盘(这也是这个Sheet类型的特性,只负责写入不负责读取)。
    因为autoSizeColumn对中文支持有问题,所以需要额外乘上一个倍数来兼容中文宽度。
    最后设置最小宽度则是因为有时在一些非常宽的列之后(比如我这里是U到X字段很宽),多列被错误的缩短了,见下图:

    image.png
    ExportParams exportParams = new ExportParams(null, "测试sheet");
    List<ExcelExportEntity> exportColumnList = buildColumnList();
    JSONArray dataList = queryData();
    
    try {
        Workbook workbook = ExcelExportUtil.exportBigExcel(exportParams, exportColumnList, dataList);
    
        // 自动列宽
        SXSSFSheet sheet = ((SXSSFSheet) workbook.getSheetAt(0));
        sheet.trackAllColumnsForAutoSizing();
        for (int i = 0; i < exportColumnList.size(); i++) {
            sheet.autoSizeColumn(i);
            sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10); // 中文宽度
    
            int minWidth = exportColumnList.get(i).getName().length() * 600;
            if (sheet.getColumnWidth(i) < minWidth)
                sheet.setColumnWidth(i, minWidth); // 无数据额外处理
        }
    
        writeToResponse(workbook);
    } finally {
        ExcelExportUtil.closeExportBigExcel();
    }
    

    相关文章

      网友评论

          本文标题:使用easypoi时,动态设置excel列宽

          本文链接:https://www.haomeiwen.com/subject/trzadltx.html