package io.dataease.model.excel; import com.alibaba.excel.write.handler.RowWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteTableHolder; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import java.util.List; import java.util.Map; public class ErrWriteHandler implements RowWriteHandler { private List> errMsgList; public ErrWriteHandler(List> errMsgList) { this.errMsgList = errMsgList; } @Override public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { if (!isHead.booleanValue()) { Sheet sheet = writeSheetHolder.getSheet(); Map rowErrMap = errMsgList.get(relativeRowIndex.intValue()); for (Map.Entry cellMap : rowErrMap.entrySet()) { setPostil(sheet, relativeRowIndex, cellMap.getKey(), cellMap.getValue()); } } } private void setPostil(Sheet sheet, Integer relativeRowIndex, Integer i, String msg) { Workbook workbook = sheet.getWorkbook(); CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex()); cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); Drawing drawingPatriarch = sheet.createDrawingPatriarch(); XSSFClientAnchor xssfClientAnchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 0, 2, 2); Comment comment = drawingPatriarch.createCellComment(xssfClientAnchor); comment.setString(new XSSFRichTextString(msg)); Cell cell = sheet.getRow(relativeRowIndex + 1).getCell(i.intValue()); cell.setCellComment(comment); cell.setCellStyle(cellStyle); } @Override public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer rowIndex, Integer relativeRowIndex, Boolean isHead) { } @Override public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) { } }