基于yaml模板的excel导出工具
- zhacker-common:定义了Paging、Response等的接口常用类
- zhacker-exporter: 实现导出工具
- zhacker-exporter-showcase: 示例如何使用导出工具
在showcaseresources/export.yaml示例了如何为Item配置导出的标题类型等。 默认的格式化器有:default, isoDate(yyyy-MM-dd HH:mm:ss), price(###.##)
export.tables: Item: #实体类名 display: 商品列表 #表格名称 columns: - name: id #实体类字段名称 display: ID #表格列标题 width: 1800 #表格宽度 - name: shopId display: 店铺ID width: 1800 - name: name display: 商品名称 width: 7200 format: isoDate #格式化器,为空时用DefaultFormatter(格式化为普通字符串) - name: details display: 商品详情 width: 1800 - name: price display: 价格 width: 1800 format: price - name: status display: 状态 width: 1800 - name: createdAt display: 创建时间 width: 1800 format: isoDate@RestController public class Items { private final Exporter exporter; private final ItemReadService itemReadService; @Autowired public Items(Exporter exporter, ItemReadService itemReadService) { this.exporter = exporter; this.itemReadService = itemReadService; } @RequestMapping(value = "/item-export", method = RequestMethod.GET) public void exportSettleOrders(ItemPagingCriteria criteria, HttpServletResponse response, HttpServletRequest request) { exporter.export(Item.class, criteria, itemReadService::pagingItems, request, response); } } public interface ItemReadService { Response<Paging<Item>> pagingItems(ItemPagingCriteria criteria); }注意:
- 服务方法的参数:必须继承
PagingCriteria - 服务方法的返回:必须用
Response< Paging<T> > - 关键点在于
Exporter.export方法中中的用itemReadService::pagingItems引用服务方法
当某个字段要特殊处理时,可定义格式化器,注册到ColumnFormatterRegistry; 在模板中设置format时,按注册时的key来引用。
@Component public class PriceFormatter implements ColumnFormatter { @Autowired private ColumnFormatterRegistry registry; @PostConstruct public void init(){ registry.register("price", this); } /** * 2位小数 */ public static final DecimalFormat DECIMAL_FMT_2 = new DecimalFormat("0.00"); @Override public String format(Object price) { if (price == null) { return ""; } if(price instanceof Number){ return DECIMAL_FMT_2.format(((Number)price).doubleValue() / 100); }else{ return ""; } } }