| 
 | 
 
在使用EasyExcel导出excel的时候,可能有时需要自己在指定位置插入数据,并不能封装成对象,这个时候我们就需要用到 WriteHandler 拦截指定的事件来处理。 
注意点 
 
需要区分是在 最后一行之前 还是之后 
原因: 
 
excel只能一直向前,而且内存里面只存储100条,而afterRowDispose是在每一行写入完成的时候调用,所以修改一行需要拦截这个事件。 
如果是在最后一行之后,由于后面不会再有数据了,所以只要拦截afterWorkbookDispose,在整个excel快写完的时候调用,继续写入数据即可。 
参考代码如下 
 /** 
     * 在指定单元格写入数据 
     */ 
    @Test 
    public void specifiedCellWrite() { 
        File file = TestFileUtil.createNewFile("rare/specifiedCellWrite" + System.currentTimeMillis() 
            + ".xlsx"); 
 
        // 需要区分是在 最后一行之前 还是之后 
        // 区分的原因是:excel只能一直向前,而且内存里面只存储100条,而afterRowDispose是在每一行写入完成的时候调用,所以修改一行需要拦截这个事件 
        // 如果是在最后一行之后,由于后面不会再有数据了,所以只要拦截afterWorkbookDispose,在整个excel快写完的时候调用,继续写入数据即可 
 
        EasyExcel.write(file, DemoData.class) 
            // 写入的值在最后一行之前 
            .registerWriteHandler(new RowWriteHandler() { 
                @Override 
                public void afterRowDispose(RowWriteHandlerContext context) { 
                    if (context.getRow().getRowNum() == 2) { 
                        Cell cell = context.getRow().getCell(2); 
                        if (cell == null) { 
                            cell = context.getRow().createCell(2); 
                        } 
                        cell.setCellValue("测试的第二行数据呀"); 
                    } 
                } 
            }) 
            // 写入的值 在最后一一行之后 
            .registerWriteHandler(new WorkbookWriteHandler() { 
                @Override 
                public void afterWorkbookDispose(WorkbookWriteHandlerContext context) { 
                    Workbook workbook = context.getWriteWorkbookHolder().getWorkbook(); 
                    Sheet sheet = workbook.getSheetAt(0); 
                    Row row = sheet.getRow(99); 
                    if (row == null) { 
                        row = sheet.createRow(99); 
                    } 
                    Cell cell = row.getCell(2); 
                    if (cell == null) { 
                        cell = row.createCell(2); 
                    } 
                    cell.setCellValue("测试地99行数据呀"); 
                } 
            }) 
            .sheet("模板") 
            .doWrite(data()); 
 
        log.info("写入到文件完成:{}", file); 
    } |   
 
 
 
 |