EasyExcel新增一列数据,用于导入后标记行错误提示信息

EasyExcel新增一列数据,用于导入后标记错误提示信息
  • 模板表格内容
    在这里插入图片描述
    模拟导入失败后,标记行错误提示信息

导入 EasyExcel Maven包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

能日赚30的APP试玩平台推荐,亲测有效

/**
 * 导入后新增一列标记错误提示信息
 *
 * @author 1014483974@qq.com
 * [能日赚30的APP试玩平台推荐,亲测有效]
 * (https://mp.weixin.qq.com/s/VZRMTVWmKwfFV4-miJnOJw)
 */
public class ExcelTest {

    @Test
    public void test() {
        // 临时文件路径
        String writerFilePath = "D:/temp/device_" + IdUtil.fastUUID() + ".xls";
        try (FileInputStream in = new FileInputStream("D:/temp/template.xls")) {
            // 生成错误信息的文件
            ExcelWriterBuilder writerBuilder = EasyExcel.write(writerFilePath)
                    .withTemplate(in)
                    .excelType(ExcelTypeEnum.XLS)
                    .needHead(false);
            ExcelWriterSheetBuilder writerSheetBuilder = EasyExcel.writerSheet("Sheet1");
            writerBuilder.registerWriteHandler(new CommentWriteHandler(1, "IMEI已被分配"));
            ExcelWriter excelWriter = writerBuilder.build();
            excelWriter.write(new ArrayList<>(), writerSheetBuilder.build());
            excelWriter.finish();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

CommentWriteHandler 是自定义handler,根据业务需求调整

/**
 * 自定义拦截器.新增注释,第一行头加批注
 *
 * @author 1014483974@qq.com
 * [能日赚30的APP试玩平台推荐,亲测有效]
 * (https://mp.weixin.qq.com/s/VZRMTVWmKwfFV4-miJnOJw)
 */
@Slf4j
public class CommentWriteHandler implements SheetWriteHandler {

    /**
     * 第几行
     */
    private final Integer cellIndex;

    /**
     * 批注内容
     */
    private final String annotation;

    /**
     * 表格样式
     */
    private CellStyle cellStyle;
    private CellStyle cellStyleHeader;


    public CommentWriteHandler(Integer cellIndex, String annotation) {
        this.cellIndex = cellIndex;
        this.annotation = annotation;
    }

    @Override
    public void afterSheetCreate(SheetWriteHandlerContext context) {
        Sheet sheet = context.getWriteSheetHolder().getSheet();
        sheet.setColumnWidth(1, 18000);
        Row row = sheet.getRow(cellIndex);
        if (row == null) {
            row = sheet.createRow(cellIndex);
        }
        Cell cell = row.getCell(1);
        if (cell == null) {
            cell = row.createCell(1);
        }
        Workbook workbook = context.getWriteWorkbookHolder().getWorkbook();
        // 表头样式
        if (cellStyleHeader == null) {
            cellStyleHeader = workbook.createCellStyle();
            cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
            cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
            cellStyleHeader.setFillForegroundColor(IndexedColors.WHITE.getIndex());
            Font font = workbook.createFont();
            font.setFontName("微软雅黑");
            font.setColor((short) 10);
            font.setFontHeightInPoints((short) 12);
            cellStyleHeader.setFont(font);
        }
        cell.setCellStyle(cellStyleHeader);
        cell.setCellValue(annotation);
        // 内容样式
        if (cellStyle == null) {
            cellStyle = workbook.createCellStyle();
            cellStyle.setAlignment(HorizontalAlignment.CENTER);
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            cellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
            Font font = workbook.createFont();
            font.setFontName("微软雅黑");
            font.setFontHeightInPoints((short) 12);
            cellStyle.setFont(font);
        }
        // 表头
        Row row0 = sheet.getRow(0);
        if (row0 == null) {
            row0 = sheet.createRow(0);
        }
        // 第几列。我这里是1.正常业务根据需求传递
        Cell cell0 = row0.getCell(1);
        if (cell0 == null) {
            cell0 = row0.createCell(1);
        }
        cell0.setCellStyle(cellStyle);
        cell0.setCellValue("错误信息");
    }

}

运行方法后,生成文件带新增的一列,标记错误行的信息
在这里插入图片描述

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
为了新增三列数据,我们需要在ExcelTest类中进如下操作: 1. 在ExcelWriterSheetBuilder中使用head方法添加表头信息。 2. 在ExcelWriterSheetBuilder中使用registerWriteHandler方法添加需要写入的数据。 3. 在ExcelWriterSheetBuilder中使用registerWriteHandler方法添加需要写入的数据。 4. 在ExcelWriterSheetBuilder中使用registerWriteHandler方法添加需要写入的数据。 下面是示例代码: ```java public class ExcelTest { @Test public void test() { // 临时文件路径 String writerFilePath = "D:/temp/device_" + IdUtil.fastUUID() + ".xls"; try (FileInputStream in = new FileInputStream("D:/temp/template.xls")) { // 生成错误信息的文件 ExcelWriterBuilder writerBuilder = EasyExcel.write(writerFilePath) .withTemplate(in) .excelType(ExcelTypeEnum.XLS) .needHead(true); ExcelWriterSheetBuilder writerSheetBuilder = EasyExcel.writerSheet("Sheet1"); writerSheetBuilder.head(head()); writerBuilder.registerWriteHandler(new CommentWriteHandler(1, "IMEI已被分配")); writerBuilder.registerWriteHandler(new ColumnWidthStyleStrategy()); writerBuilder.registerWriteHandler(new FillStyleStrategy()); writerBuilder.registerWriteHandler(new FontStyleStrategy()); ExcelWriter excelWriter = writerBuilder.build(); excelWriter.write(new ArrayList<>(), writerSheetBuilder.build()); excelWriter.finish(); } catch (IOException e) { e.printStackTrace(); } } private List<List<String>> head() { List<List<String>> head = new ArrayList<>(); List<String> head0 = new ArrayList<>(); head0.add("列1"); List<String> head1 = new ArrayList<>(); head1.add("列2"); List<String> head2 = new ArrayList<>(); head2.add("列3"); List<String> head3 = new ArrayList<>(); head3.add("列4"); head.add(head0); head.add(head1); head.add(head2); head.add(head3); return head; } } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值