diff --git a/src/main/java/com/biutag/supervision/service/ModifiedVerifyContentCellWriteHandler.java b/src/main/java/com/biutag/supervision/service/ModifiedVerifyContentCellWriteHandler.java index 9d974e7..e99e97c 100644 --- a/src/main/java/com/biutag/supervision/service/ModifiedVerifyContentCellWriteHandler.java +++ b/src/main/java/com/biutag/supervision/service/ModifiedVerifyContentCellWriteHandler.java @@ -2,24 +2,37 @@ package com.biutag.supervision.service; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.write.handler.CellWriteHandler; +import com.alibaba.excel.write.handler.RowWriteHandler; import com.alibaba.excel.write.handler.context.CellWriteHandlerContext; +import com.alibaba.excel.write.handler.context.RowWriteHandlerContext; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.RichTextString; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFColor; import org.apache.poi.xssf.usermodel.XSSFFont; -public class ModifiedVerifyContentCellWriteHandler implements CellWriteHandler { +public class ModifiedVerifyContentCellWriteHandler implements CellWriteHandler, RowWriteHandler { private static final int MODIFIED_VERIFY_CONTENT_COLUMN_INDEX = 6; + private static final int FINAL_WRITE_ORDER = 60000; + private static final int ESTIMATED_CHARACTERS_PER_LINE = 55; + private static final float ROW_HEIGHT_PER_LINE = 20F; private Font labelFont; private Font arrowFont; private CellStyle wrappedStyle; + @Override + public int order() { + return FINAL_WRITE_ORDER; + } + @Override public void afterCellDispose(CellWriteHandlerContext context) { if (Boolean.TRUE.equals(context.getHead()) @@ -47,11 +60,28 @@ public class ModifiedVerifyContentCellWriteHandler implements CellWriteHandler { } offset += line.length() + 1; } - float requiredHeight = Math.max(cell.getRow().getHeightInPoints(), lines.length * 18F); - cell.getRow().setHeightInPoints(requiredHeight); cell.setCellValue(richText); } + @Override + public void afterRowDispose(RowWriteHandlerContext context) { + if (Boolean.TRUE.equals(context.getHead())) { + return; + } + Row row = context.getRow(); + Cell contentCell = row.getCell(MODIFIED_VERIFY_CONTENT_COLUMN_INDEX); + if (contentCell == null || StrUtil.isBlank(contentCell.getStringCellValue())) { + return; + } + String[] lines = contentCell.getStringCellValue().split("\\n", -1); + int visualLineCount = 0; + for (String line : lines) { + visualLineCount += Math.max(1, (line.length() + ESTIMATED_CHARACTERS_PER_LINE - 1) + / ESTIMATED_CHARACTERS_PER_LINE); + } + row.setHeightInPoints(Math.max(row.getHeightInPoints(), visualLineCount * ROW_HEIGHT_PER_LINE)); + } + private Font getLabelFont(Workbook workbook) { if (labelFont == null) { labelFont = workbook.createFont(); @@ -79,7 +109,10 @@ public class ModifiedVerifyContentCellWriteHandler implements CellWriteHandler { wrappedStyle = workbook.createCellStyle(); wrappedStyle.cloneStyleFrom(cell.getCellStyle()); wrappedStyle.setWrapText(true); + wrappedStyle.setVerticalAlignment(VerticalAlignment.TOP); + wrappedStyle.setAlignment(HorizontalAlignment.LEFT); } cell.setCellStyle(wrappedStyle); } + }