自学内容网 自学内容网

Hutool工具类导出Excel设置自适应宽度

Hutool工具类导出Excel设置自适应宽度。最近在用Hutool的工具类BigExcelWriter实现Excel表的导出,测试过程,发现默认是不自动适应宽度的,需要设置属性才能自适应

在Hutool的官方文档https://plus.hutool.cn/apidocs/cn/hutool/poi/excel/BigExcelWriter.html找到下面的属性

在这里插入图片描述

注意,文档里面也有提醒此方法必须在指定列数据完全写出后调用才有效,也就是我们需要在write后调用

SXSSFWorkbook workbook = new SXSSFWorkbook();
BigExcelWriter writer = new BigExcelWriter(workbook,"sheet1");
// ... 省略业务实现
writer.writeRow(data);
// 必须在write后调用
writer.autoSizeColumnAll();

不过设置这个自动适配属性后,发现对于数字或者英文字母的都可以自动适配宽度,对于中文的不能自动适配,看了下源码,发现Huttol里面也是调用poi的,应该是poi不能自动适配中文的?所以需要自动手动适配一下宽度

sheet.setColumnWidth(columnNum, columnWidth );

或者网上很多地方的写法,写个工具类,适配一下宽度

public static void setSizeColumn(Sheet sheet, int size) {
     for (int columnNum = 0; columnNum <= size; columnNum++) {
         int columnWidth = sheet.getColumnWidth(columnNum) / 256;
         for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
             Row currentRow;
             if (sheet.getRow(rowNum) == null) {
                 currentRow = sheet.createRow(rowNum);
             } else {
                 currentRow = sheet.getRow(rowNum);
             }

             if (currentRow.getCell(columnNum) != null) {
                 Cell currentCell = currentRow.getCell(columnNum);
                 if (currentCell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
                     int length = currentCell.getStringCellValue().getBytes().length;
                     if (columnWidth < length) {
                         columnWidth = length;
                     }
                 }
             }
         }
         sheet.setColumnWidth(columnNum, columnWidth * 256);
     }
 }

调用:

setSizeColumn(writer.getSheet(), writer.getColumnCount());

原文地址:https://blog.csdn.net/u014427391/article/details/142365959

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!