###10.1 导入时为啥这行为空还读取 或者为啥只有3行却读取了100行数据
在导入参数ImportParams 有一个属性keyIndex

    /**
     * 主键设置,如何这个cell没有值,就跳过 或者认为这个是list的下面的值
     * 大家不理解,去掉这个
     */

    private Integer             keyIndex         = null;

最早是默认为0的,但是很多说有问题,就取消默认值了,如果你遇到上面的问题,请不他改为你肯定不为空的一列比如0,就可以解决上面问题了

###10.2 模板如何合并单元格
提供了PoiMergeCellUtil类供大家生成wb之后,自己再调用

/**
     * 纵向合并相同内容的单元格
     *
     * @param sheet
     * @param startRow 开始行
     * @param columns  需要处理的列
     */
    public static void mergeCells(Sheet sheet, int startRow, Integer... columns) {
        if (columns == null) {
            throw new ExcelExportException("至少需要处理1列");
        }
        Map<Integer, int[]> mergeMap = new HashMap<Integer, int[]>();
        for (int i = 0; i < columns.length; i++) {
            mergeMap.put(columns[i], null);
        }
        mergeCells(sheet, mergeMap, startRow, sheet.getLastRowNum());
    }

这个逻辑是,只要一列连续值是相同的就合并

###10.3 如何让单元格是数组
参考2.7样式自定义,让你这个单元格是数组类型的样式就可以了

如果是模板 n:

###10.4 类找不到怎么办
https://www.findjar.com/index.x

###10.5 replace NULL值问题
@excel replace = { “客户银行卡OA01”, “客户金账户OA02”, “客户存管账户OA03”,”渠道金账户OA04”, “营销款账户_OA05”}
private String outAccountType
当outAccountType 值为null的时候,excel会转为 null字符串

可以这么配置“_null”,就可以解决上述问题

@Excel(name = "出账账户类型", width = 20, replace = { "客户银行卡_OA01", "客户金账户_OA02", "客户存管账户_OA03"
            ,"渠道金账户_OA04", "营销款账户_OA05", "_null"}, orderNum = "6")

###10.6 无表头或者表头重复不好判断如何解决
fixedIndex 字段可以直接让你固定列跳过那些判断直接读取数据

if (excelEntity.getFixedIndex() != -1) {
            temp.put("FIXED_" + excelEntity.getFixedIndex(), excelEntity);
        } else {
            temp.put(excelEntity.getName(), excelEntity);
}

你可以在@Excel上使用,也可以在自己ExcelImportEntity是写

###10.7 模板导出一对多,如何合并单元格和循环

文档更新时间: 2020-05-09 17:11   作者:admin