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());