“ 导出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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




