wangrong
2026-08-30 761e5c5fa871959f60e15c971c8d83f2b53d0af5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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<Map<Integer, String>> errMsgList;
 
    public ErrWriteHandler(List<Map<Integer, String>> 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<Integer, String> rowErrMap = errMsgList.get(relativeRowIndex.intValue());
            for (Map.Entry<Integer, String> 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) {
 
    }
}