package com.qianwen.smartman.modules.mdc.strategy; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.util.CollectionUtils; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.ss.usermodel.Cell; public class CustomCellWriteHandler extends AbstractColumnWidthStyleStrategy { private Map> CACHE = new HashMap<>(); protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List cellDataList, Cell cell, Head head, Integer integer, Boolean isHead) { boolean needSetWidth = isHead.booleanValue() || !CollectionUtils.isEmpty(cellDataList); if (needSetWidth) { Map maxColumnWidthMap = this.CACHE.get(writeSheetHolder.getSheetNo()); if (maxColumnWidthMap == null) { maxColumnWidthMap = new HashMap<>(); this.CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap); } Integer columnWidth = dataLength(cellDataList, cell, isHead); if (columnWidth.intValue() >= 0) { if (columnWidth.intValue() > 30) { columnWidth = 30; } Integer maxColumnWidth = maxColumnWidthMap.get(Integer.valueOf(cell.getColumnIndex())); if (maxColumnWidth == null || columnWidth.intValue() > maxColumnWidth.intValue()) { maxColumnWidthMap.put(Integer.valueOf(cell.getColumnIndex()), columnWidth); writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth.intValue() * 256); } } } } private Integer dataLength(List cellDataList, Cell cell, Boolean isHead) { if (isHead.booleanValue()) { return Integer.valueOf(cell.getStringCellValue().getBytes().length); } CellData cellData = cellDataList.get(0); CellDataTypeEnum type = cellData.getType(); if (type == null) { return -1; } switch (type) { case STRING: return Integer.valueOf((cellData.getStringValue().getBytes()).length); case BOOLEAN: return Integer.valueOf((cellData.getBooleanValue().toString().getBytes()).length); case NUMBER: return Integer.valueOf((cellData.getNumberValue().toString().getBytes()).length); } return -1; } }