easypoi通过反射修改表头,poi,workbook修改表头

没废话上代码,
使用easypoi导出时一般会用到一个实体类
提供一个示例代码:
实体类:

@Data
public class TestVO {

    private String id;
    @Excel(name = "字段1")
    private String findId1;
    @Excel(name = "字段2")
    private String findId2;

}

工具类:

/**
     * 反射修改easypoi表头详细信息
     * @param entity 实体对象
     * @param fieIdName 修改的实体字段名称
     * @param nameTitle 想要修改为xx
     * @throws NoSuchFieldException
     * @throws IllegalAccessException
     */
    public static void upDateTitle(Class<?> entity,String fieIdName,String nameTitle) throws NoSuchFieldException, IllegalAccessException {
        // 获取目标实体类的目标字段
        Field field = entity.getDeclaredField(fieIdName);
        // 获取该字段的注解
        Excel annotation = field.getAnnotation(Excel.class);
        // 获取Excel注解所持有的 InvocationHandler
        InvocationHandler handler = Proxy.getInvocationHandler(annotation);
        Field hFile = handler.getClass().getDeclaredField("memberValues");
        // 设值私有可访问
        hFile.setAccessible(true);
        Map<Object, Object> map = (Map<Object, Object>) hFile.get(handler);
        // 获取配置信息
        map.put("name", nameTitle);
    }

使用效果:

		List<TestVO > list = new ArrayList();//TODO 此处需要获取自己的数据
        //三个参数,导出标题名,sheetname,文件格式 HSSF:xls  XSSH:xlsx
        ExportParams params = new ExportParams("xxxxx表", "xxxx表", ExcelType.XSSF);
        Class<?> entity = TestVO.class;
        try {
            ExcelUtil.upDateTitle(entity, "approveDeptName", "测试测试");
        } catch (NoSuchFieldException e) {
            log.error("错误", e);
        } catch (IllegalAccessException e) {
            log.error("错误", e);
        }
        Workbook workbook = ExcelExportUtil.exportExcel(params, entity, list);
        //以流的形式导出
        ExcelUtil.excelDerive(response, workbook, "xxxx表");

在这里插入图片描述
在这里插入图片描述

感谢以下博主:
参考
扩展:
上边的方法不知道咋处理多个sheet所以此方法应运而生:

/**
     * 修改表头
     * @param workbook excel对象
     * @param sheetName sheet名称
     * @param row 第几行
     * @param cell 第几列
     * @param newStr 新字符串
     */
    public static void upDateTitle(Workbook workbook,String sheetName,int row,int cell,String newStr) {
        Sheet sheet = workbook.getSheet(sheetName);
        Cell cell1 = sheet.getRow(row).getCell(cell);
        cell1.setCellValue(newStr);
    }

应用:

		List<TestVO > list = new ArrayList();//TODO 此处需要获取自己的数据
        //三个参数,导出标题名,sheetname,文件格式 HSSF:xls  XSSH:xlsx
        ExportParams params = new ExportParams("xxxxx表头名称", "xxxxsheet名称", ExcelType.XSSF);
        Class<?> entity = TestVO.class;
        //try {
        //    ExcelUtil.upDateTitle(entity, "approveDeptName", "测试测试");
        //} catch (NoSuchFieldException e) {
        //    log.error("错误", e);
        //} catch (IllegalAccessException e) {
        //    log.error("错误", e);
        //}
        Workbook workbook = ExcelExportUtil.exportExcel(params, entity, list);
        //序号从0开始,不是从1,从0开始,从0开始,从0开始重要的事情说三遍
        try {
            ExcelUtil.upDateTitle(workbook,"xxxxsheet名称",1,0,"测试测试");
        } catch (NullPointerException e) {
        	log.error("错误", e);
        }
        //以流的形式导出
        ExcelUtil.excelDerive(response, workbook, "xxxx表");

欢迎各路大神留言讨论

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小可乐-我一直在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值