excel导入导出之easypoi动态列导出(自定义导出列)

本文讨论了从传统的基于注解的Excel导出方式转变为支持用户自定义选择导出字段的方法,通过JSON模板存储字段配置,以及如何动态构建导出表单,包括合并单元格和高度设置。
摘要由CSDN通过智能技术生成

之前实现的导出功能都是在实体类上面加注解这样导出的字段都是固定的加注解的字段,很不灵活,如果想要实现用户可以自定义选择导出的字段就不能采用注解的方式实现了

使用注解导出方式
 /**
     * 省
     */
    @Excel(name = "省", needMerge = true)
    private String province;
    /**
     * 市
     */
    @Excel(name = "市", needMerge = true)
    private String city;
    /**
     * 区
     */
    @Excel(name = "区/县", needMerge = true)
    private String area;
    /**
     * 详细地址
     */
    @Excel(name = "详细地址", needMerge = true)
    private String address;

自定义注解导出

想实现用户自定义字段导出,首先要让用户自定义选择好要导出的模版我们以JSON的形式存放到数据库中,其中value就是要导出的字段名。表中还可以存入表名等一些相关信息

[{"name":"公司名称","value":"companyName"},{"name":"省","value":"province"},{"name":"市","value":"city"},{"name":"区/县","value":"area"},{"name":"详细地址","value":"address"}]

当用户选择某一个模版导出时,只需把数据ID传入我们查出要导出的字段名

ExportParams exportParams = new ExportParams("企业信息", "企业信息");
        exportParams.setStyle(ExcelStyleUtil.class);
        exportParams.setDictHandler(excelDictHandler);
//根据ID查出要导出的字段
CommonUserExportField exportField = commonUserExportFieldService.getById(id);
//工具类构造动态导出表单  一对多导出  合并单元格  固定宽度
 List<ExcelExportEntity> list = ExcelUtil.dynamicTemplate(exportField.getExportFieid());
 //设置一对多中 的字段名
      ExcelExportEntity excelentity = new ExcelExportEntity("股权结构", "shareholderStrs");
            List<ExcelExportEntity> temp = new ArrayList<ExcelExportEntity>();
            //股权结构中的字段名
            ExcelExportEntity excelExportEntity = new ExcelExportEntity("股东名字", "shareholderName");
            excelExportEntity.setHeight(-1);
            temp.add(excelExportEntity);
            //股权结构中的字段名2
            ExcelExportEntity excelExportEntity1 = new ExcelExportEntity("持股比例", "ratio");
            excelExportEntity1.setHeight(-1);
            temp.add(excelExportEntity1);
            excelentity.setList(temp);
            list.add(excelentity);
            //调用 方法exportParams为设置的sheet页信息 list为拼装好的导出字段信息  jsonObjects为数据项
            workbook = ExcelExportUtil.exportExcel(exportParams,
                    list, jsonObjects);

构造动态表单方法 构造动态导出表单 一对多导出 合并单元格 固定宽度

public static List<ExcelExportEntity> dynamicTemplate(String field) {
        List<Map> list = JSONUtil.toList(field, Map.class);
        List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
        ExcelExportEntity excelentity = null;
        for (Map map : list) {
            //构造普通字段
            excelentity = new ExcelExportEntity((String) map.get("name"), map.get("value"));
            //宽度
            excelentity.setWidth(15);
            //是否合并 等价于注解中的needMerge = true
            excelentity.setNeedMerge(true);
            //高度 设置为-1为自适应高度 PS:好像没有效果
            excelentity.setHeight(-1);
            entity.add(excelentity);
        }
        return entity;
    }

亲测有效的设置高度的方法

//设置-1为自适应高度,其他为对应的值
 int lastRowNum = sheet.getLastRowNum();
        for (int i = 0; i <=lastRowNum; i++) {
            sheet.getRow(i).setHeight((short) -1);
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值