暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

让导出excel更简单

产品与码农 2021-01-27
198

 导出excel这是开发过程中经常会碰到的问题, 这是非常常见的开发需求。本文章不讲怎么导出excel,导出方案很成熟,hutool就非常优秀,本文只为解决一个导出的痛点


01

看看之前的是怎么样的


以往开发经历中,在定义导出哪些列的时候,大部分都是采用如下方式:

    private final static String[] EXPORT_HEADERS = {"列1","列2","列3","列4","列5","列6""列7"};
    private final static String[] EXPORT_COLUMNS = {"column1","column2""column3","column4""column5""column6""column8"};     

采用这种方式我感受到的痛点有这些:


痛点1:当列很多的时候,怎么快速确定headers 和 columns 长度一致

private final static String[] EXPORT_HEADERS = {"列x","列a","列c","列e","列f","列g""列h", ......."列xye"};
private final static String[] EXPORT_COLUMNS = {"column1","column2""column3","column4""column5""column6""column8"......."columnxye"};     

痛点2:  列的名字也不是简单的数字,如果很多字段值类型都一样并且值差不多(比如连续连续几列都是数字并且相差不大),导出后很难分清楚导出结果对不对。


痛点3:需求想要在某个地方加几列,处理起来也很痛苦,不确定是否加好。


02


再来看现在怎么处理


为了解决上面的问题,我采用以下的代码方式处理,3个痛点迎刃而解

    private final static Map<String, String> HEADER_COLUMN_MAP = new LinkedHashMap<String, String>() {
{
put("订单号", "orderId");
put("省", "province");
put("市", "city");
put("区", "dict");
}
};


public final static String[] ORDER_EXPORT_HEADERS = HEADER_COLUMN_MAP.keySet().toArray(new String[0]);
public final static String[] ORDER_EXPORT_COLUMNS = HEADER_COLUMN_MAP.values().toArray(new String[0]);

其实看代码也明白不需要过多解释,LinkedHashMap保证了列加入是有序的,也就是内部put的顺序,put的key,value代表列与字段名一一对应,final常量,不会被外部修改;增加字段直接在指定位置put即可。



文章转载自产品与码农,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论