办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 72|回复: 0

EasyExcel如何在指定单元格写入数据

[复制链接]

1

主题

5

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-1-17 14:46:18 | 显示全部楼层 |阅读模式
在使用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);
    }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-7-5 09:14 , Processed in 0.080833 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表