EasyExcel导出

发布时间 2023-03-28 22:41:13作者: 小贤看世界

转换器LocalDateStringConverter

package com.javasm.sales.common;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * @Author:Zxb
 * @Version:1.0
 * @Date:2023/3/28-21:35
 * @Since:jdk1.8
 * @Description:
 */

/**
 * 自定义LocalDateStringConverter
 * 用于解决使用easyexcel导出表格时候,默认不支持LocalDateTime日期格式
 *
 * 在需要的属性上添加注解 @ExcelProperty(value = "入职时间", converter = LocalDateStringConverter.class)
 */

public class LocalDateStringConverter implements Converter<LocalDateTime> {
    @Override
    public Class supportJavaTypeKey() {
        return LocalDateTime.class;
    }

    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    @Override
    public LocalDateTime convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        return LocalDateTime.parse(cellData.getStringValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }

    @Override
    public CellData convertToExcelData(LocalDateTime localDateTime, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String format = formatter.format(localDateTime);
        return new CellData(format);
    }
}

实体类

package com.javasm.sales.domain.entity;

import java.math.BigDecimal;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.baomidou.mybatisplus.annotation.IdType;

import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;

import com.javasm.sales.common.LocalDateStringConverter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * <p>
 * 销售订单表
 * </p>
 *
 * @author lin
 * @since 2023-03-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="SalesOrder对象", description="销售订单表")
public class SalesOrder implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "序号")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty(value = "订单编号")
    @ExcelProperty(value = "订单编号")
    private String orderId;

    @ApiModelProperty(value = "收货人id")
    @ExcelProperty(value = "客户id")
    private Integer customerId;

    @ApiModelProperty(value = "订单类型:内部订单、电话订单、淘宝订单、京东订单")
    @ExcelProperty(value = "订单类型")
    private String orderType;

    @ApiModelProperty(value = "订单动作:订购、换购、支付")
    @ExcelProperty(value = "订单动作")
    private String orderActions;

    @ApiModelProperty(value = "业务类型:普通业务、号卡套餐")
    @ExcelProperty(value = "业务类型")
    private String businessType;

    @ApiModelProperty(value = "支付方式:支付宝、微信、银行、货到付款")
    @ExcelProperty(value = "支付方式")
    private String paymentMethods;

    @ApiModelProperty(value = "配送方式:EMS、京东物流、德邦快递")
    @ExcelProperty(value = "配送方式")
    private String shippingMethods;

    @ApiModelProperty(value = "配送费用")
    @ExcelProperty(value = "配送费用")
    private BigDecimal shippingCosts;

    @ApiModelProperty(value = "物流单号")
    @ExcelProperty(value = "物流单号")
    private String trackingNumber;

    @ApiModelProperty(value = "订单状态:待出库、已出库、已发货、已到货")
    @ExcelProperty(value = "订单状态")
    private String orderStatus;

    @ApiModelProperty(value = "下单日期")
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ColumnWidth(20)
    @ExcelProperty(value = "下单日期", converter = LocalDateStringConverter.class)
    private LocalDateTime orderDate;

    @ApiModelProperty(value = "发货日期")
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ColumnWidth(20)
    @ExcelProperty(value = "发货日期", converter = LocalDateStringConverter.class)
    private LocalDateTime shipDate;

    @ApiModelProperty(value = "签收日期")
//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ColumnWidth(20)   //列宽  
    @ExcelProperty(value = "签收日期", converter = LocalDateStringConverter.class) //引入转换器
    private LocalDateTime receiptDate;


}

controller

package com.javasm.sales.controller;


import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
import com.javasm.base.common.http.AxiosResult;
import com.javasm.base.common.page.PageResult;
import com.javasm.sales.domain.criteria.OrderInquiryCriteria;
import com.javasm.sales.domain.entity.SalesOrder;
import com.javasm.sales.service.SalesOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;

/**
 * <p>
 * 销售订单表 前端控制器
 * </p>
 *
 * @author lin
 * @since 2023-03-27
 */
@RestController
@RequestMapping("/sales/sales-order")
public class SalesOrderController {

    @Autowired
    private SalesOrderService salesOrderService;

    @GetMapping("export")
    public void writeExcel(HttpServletResponse response) throws IOException {  //必须用void
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        //防止中文乱码
        String fileName = URLEncoder.encode("订单信息","UTF-8");
        response.setHeader("Content-Disposition","attachment;filename*=UTF-8''"+fileName+".xlsx");

        ServletOutputStream outputStream = response.getOutputStream();

        //工作簿对象
        ExcelWriterBuilder writeWorkBook = EasyExcel.write(outputStream,SalesOrder.class);
        //工作表对象
        ExcelWriterSheetBuilder sheet = writeWorkBook.sheet();
        //准备数据
        List<SalesOrder> salesOrders = salesOrderService.list();
        //
        sheet.doWrite(salesOrders);

    }

}

前端