Springboot集成EasyExcel生成xlsx文件

使用easy excel需要先引入对应的依赖包:
gradle依赖:
//easy excel
compile('com.alibaba:easyexcel:2.1.6')
maven依赖:
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.6</version>
        </dependency>
这里展示导出byte[]的实现:
首先定义返回实体:
 
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@HeadRowHeight(20)
public class RefundOrderExportModel {

    @ExcelProperty("编号")
    @ColumnWidth(18)
    private Integer orderTaskId;

    @ExcelProperty(“单号")
    @ColumnWidth(20)
    private String orderNumber;

    @ExcelProperty("生成时间")
    @ColumnWidth(18)
    private String createTime;

    @ExcelProperty("备注")
    @ColumnWidth(25)
    private String remark;

}

其中@HeadRowHeigh注解是指定excel头的行高
@ExcelProperty注解是指定本字段对应的excel列名
@ColumnWidth注解是指定本列的列宽
定义一个通用的载体类:
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

@Data
@NoArgsConstructor
public class ExcelWriterModel implements Serializable {

    private static final long serialVersionUID = -6335872074189617219L;

    /**
     * 导出数据
     */
    private List<?> list;


    /**
     * 导出对象对于空list来说Java中是伪范型无法获取bean
     */
    private Class<?> clazz;


    /**
     * 自定义导出列
     */
    private List<List<String>> column;

    /**
     * sheet名称
     */
    private String sheetName;
}
导出byte[]实现逻辑:
public byte[] generateExcelByte(ExcelWriterModel model){
   ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
   ExcelWriter excelWriter = 
   EasyExcel.write(outputStream).autoCloseStream(Boolean.TRUE).build();
   ExcelWriterSheetBuilder excelWriterSheetBuilder = EasyExcel.writerSheet(model.getSheetName());
   WriteSheet writeSheet;
   if (null != model.getClazz()) {
      writeSheet = excelWriterSheetBuilder.head(model.getClazz()).build();
   } else {
      writeSheet = excelWriterSheetBuilder.head(model.getColumn()).build();
   }
   excelWriter.write(model.getList(), writeSheet);
   excelWriter.finish();
   byte[] bytes = outputStream.toByteArray();
}
直接生成流并通过Controller返回的例子如下:
// 导出     
@GetMapping("download”)        
public void download(HttpServletResponse response) throws IOException {
    // 直接用浏览器或者用postman            
    response.setContentType("application/vnd.ms-excel");            
    response.setCharacterEncoding("utf-8");            
    // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系            
    String fileName = URLEncoder.encode("测试", "UTF-8");            
    response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");            
    //   XXXX.class 是按导出类  data()应为数据库查询数据,这里只是模拟            
    EasyExcel.write(response.getOutputStream(), XXXX.class).sheet("模板").doWrite(data());
}

猜你喜欢

转载自blog.csdn.net/qq_23974323/article/details/119933659