订单导出,在实际开发中会遇到订单导出功能,在该功能中可能需要合并单元格,嵌套实体,嵌套集合列表等需求。
在尝试easyExcel导出方式以后,要完成上述需求easyExcel可能有点吃力。但是easypoi相对来说简单易用。建议尝试。
导出单列:@Excel(name = "xx", width = 20, needMerge = true)
导出嵌套列表:@ExcelCollection(name = "xxx")
导出嵌套实体:@ExcelEntity(name="xxx")文章中没有举例。原理同嵌套列表
我们就可以看到EasyPoi的核心注解Excel,通过在对象上添加Excel注解,可以将对象信息直接导出到Excel中去,下面对注解中的属性做个介绍;
name: Excel中的列名;
width:指定列的宽度;
needMerge:是否需要纵向合并单元格;
format:当属性为时间类型时,设置时间的导出导出格式;
desensitizationRule:数据脱敏处理,3_4表示只显示字符串的前3位和后4位,其他为*号;replace:对属性进行替换;
suffix:对数据添加后缀。
示例:
导出订单实体
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class OrderExportExcel implements Serializable
{
@ApiModelProperty(value = "订单号")
@Excel(name = "订单号", width = 20, needMerge = true)
private String orderNo;
@ApiModelProperty(value = "订单商品")
@ExcelCollection(name = "商品列表")
private List<MyOrderItemListExcel> orderItemListExcelList;
//其他属性
//getter setter....
}
导出嵌套实体:
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class MyOrderItemListExcel implements Serializable
{
@ApiModelProperty(value = "商品名称")
@Excel(name = "商品名称", width = 50)
private String name;
//其他属性
//getter setter....
}
接口示例:
@ApiOperation(value = "订单导出", notes = "订单导出")
@RequestMapping(value = "export", method = RequestMethod.GET)
public void exportOrder(@ApiParam(value = "订单状态") @RequestParam(value = "orderStatus", required = false) String orderStatus,
@ApiParam(value = "订单号") @RequestParam(value = "orderNo", required = false) String orderNo,
@ApiParam(value = "下单手机号") @RequestParam(value = "phone", required = false) String phoneNumber,
@ApiParam(value = "开始时间") @RequestParam(value = "startTime", required = false) String startTime,
@ApiParam(value = "结束时间") @RequestParam(value = "endTime", required = false) String endTime, HttpServletRequest request,
HttpServletResponse response)
{
adminOrderService.exportOrder( orderStatus, orderNo, phoneNumber, startTime, endTime, request, response);
}
@Override
public void exportOrder(String orderStatus, String orderNo, String phoneNumber, String startTime, String endTime,
HttpServletRequest request, HttpServletResponse response)
{
List<JSONObject> orderAll = getOrderAll(orderStatus, orderNo, phoneNumber, startTime, endTime, 1, 100);
List<OrderExportExcel> orders = JSONArray
.parseArray(JSONObject.toJSONStringWithDateFormat(orderAll, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat),
OrderExportExcel.class);
log.info("获取所有订单完成size={}", orders.size());
ModelMap map = new ModelMap();
ExportParams params = new ExportParams("订单列表", "订单列表", ExcelType.HSSF);
map.put(NormalExcelConstants.DATA_LIST, orders);
map.put(NormalExcelConstants.PARAMS, params);
map.put(NormalExcelConstants.CLASS, OrderExportExcel.class);
map.put(NormalExcelConstants.FILE_NAME, "订单列表");
PoiBaseView.render(map, request, response, NormalExcelConstants.EASYPOI_EXCEL_VIEW);
}
导出示例: