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

2021-05-12  本文已影响0人  fzhyzamt

首先需要调用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();
}
上一篇下一篇

猜你喜欢

热点阅读