From fbd31387721424c65b173cbb23b03202f3e7dce6 Mon Sep 17 00:00:00 2001 From: zhoushihao <zsh19950802@163.com> Date: 星期一, 12 五月 2025 21:13:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/CustomCellWriteWidthConfig.java | 82 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 82 insertions(+), 0 deletions(-) diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/CustomCellWriteWidthConfig.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/CustomCellWriteWidthConfig.java new file mode 100644 index 0000000..fc0db4b --- /dev/null +++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/excel/CustomCellWriteWidthConfig.java @@ -0,0 +1,82 @@ +package com.mes.utils.excel; + +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.Head; +import com.alibaba.excel.metadata.data.CellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; +import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Sheet; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author : zhoush + * @Date: 2025/5/12 20:34 + * @Description: + */ +public class CustomCellWriteWidthConfig extends AbstractColumnWidthStyleStrategy { + + private final Map<Integer, Map<Integer, Integer>> CACHE = new HashMap<>(); + + @Override + protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer integer, Boolean isHead) { + boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList); + if (needSetWidth) { + Map<Integer, Integer> maxColumnWidthMap = CACHE.computeIfAbsent(writeSheetHolder.getSheetNo(), k -> new HashMap<>()); + Integer columnWidth = this.dataLength(cellDataList, cell, isHead); + if (columnWidth > 0) { + if (columnWidth > 10) { + columnWidth = 20; + } else { + columnWidth = 10; + } + Integer maxColumnWidth = maxColumnWidthMap.get(cell.getColumnIndex()); + if (maxColumnWidth == null || columnWidth > maxColumnWidth) { + maxColumnWidthMap.put(cell.getColumnIndex(), columnWidth); + Sheet sheet = writeSheetHolder.getSheet(); + sheet.setColumnWidth(cell.getColumnIndex(), 256 * columnWidth + 184); + } + } + } + } + + /** + * 璁$畻闀垮害 + * + * @param cellDataList + * @param cell + * @param isHead + * @return + */ + private Integer dataLength(List<WriteCellData<?>> cellDataList, Cell cell, Boolean isHead) { + if (isHead) { + return cell.getStringCellValue().getBytes().length; + } else { + CellData<?> cellData = cellDataList.get(0); + CellDataTypeEnum type = cellData.getType(); + if (type == null) { + return -1; + } else { + switch (type) { + case STRING: + // 鎹㈣绗︼紙鏁版嵁闇�瑕佹彁鍓嶈В鏋愬ソ锛� + int index = cellData.getStringValue().indexOf("\n"); + return index != -1 ? + cellData.getStringValue().substring(0, index).getBytes().length + 1 : cellData.getStringValue().getBytes().length + 1; + case BOOLEAN: + return cellData.getBooleanValue().toString().getBytes().length; + case NUMBER: + return cellData.getNumberValue().toString().getBytes().length; + default: + return -1; + } + } + } + } + +} -- Gitblit v1.8.0