阿里easyExcel使用—上(1.1.2-beta5版本)

在這裏插入圖片描述
源碼地址:https://github.com/alibaba/easyexcel
一、jar包依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>1.1.2-beta5</version>
</dependency>

本版本是阿里beta測試版 目前網絡上有關阿里easyExcel的介紹和demo基本都是這個版本或以下
下面就是demo工具類

public class ExcelUtil {
    /**
     * 導出 Excel :一個 sheet,帶表頭.
     *
     * @param response  HttpServletResponse
     * @param list      數據 list,每個元素爲一個 BaseRowModel
     * @param fileName  導出的文件名
     * @param sheetName 導入文件的 sheet 名
     * @param model     映射實體類,Excel 模型
     * @throws Exception 異常
     */


    public static void writeExcel(
            HttpServletResponse response, List<? extends BaseRowModel> list,
            String fileName, String sheetName, BaseRowModel model) throws Exception {
        ExcelWriter writer =
                new ExcelWriter(null,getOutputStream(fileName, response), ExcelTypeEnum.XLSX,true,new StyleExcelHandler());
        Sheet sheet = new Sheet(1, 0, model.getClass());
        sheet.setSheetName(sheetName);
        writer.write(list, sheet);
        writer.finish();
    }

   
 /**
     * 導出文件時爲Writer生成OutputStream.
     *
     * @param fileName 文件名
     * @param response response
     * @return ""
     */
    private static OutputStream getOutputStream(String fileName,
                                                HttpServletResponse response) throws Exception {
        try {
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf8");
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
            response.setHeader("Pragma", "public");
            response.setHeader("Cache-Control", "no-store");
            response.addHeader("Cache-Control", "max-age=0");
            return response.getOutputStream();
        } catch (IOException e) {
            throw new Exception("導出excel表格失敗!", e);
        }
    }

樣式類     在網上拷貝過來的樣式類的基礎上進行了內存優化 速度優化
public class StyleExcelHandler implements WriteHandler {

   // 把樣式提出來防止重複new  
    private  CellStyle cellStyle;

    @Override
    public void sheet(int i, Sheet sheet) {
        Workbook workbook = sheet.getWorkbook();
        CellStyle cellStyle = workbook.createCellStyle();
        this.cellStyle = createStyle(cellStyle);
    }

    @Override
    public void row(int i, Row row) {
    }

    @Override
    public void cell(int i, Cell cell) {
        // 從第二行開始設置格式,第一行是表頭 從0行開始
        if (cell.getRowIndex() > 0) {
            cell.getRow().getCell(i).setCellStyle(cellStyle);
        }
    }

    /**
     * 實際中如果直接獲取原單元格的樣式進行修改,
     * 最後發現是改了整行的樣式, 因此這裏是新建一個樣式
     */
    private CellStyle createStyle(CellStyle cellStyle) {
        // 下邊框
        cellStyle.setBorderBottom(BorderStyle.THIN);
        // 左邊框
        cellStyle.setBorderLeft(BorderStyle.THIN);
        // 上邊框
        cellStyle.setBorderTop(BorderStyle.THIN);
        // 右邊框
        cellStyle.setBorderRight(BorderStyle.THIN);
        // 水平對齊方式
        cellStyle.setAlignment(HorizontalAlignment.LEFT);
        // 垂直對齊方式
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        return cellStyle;
    }

實體映射Excelproperty 對應導出Excel表頭

@Data
public class User extends BaseRowModel implements Serializable {
    /**
     * value: 表頭名稱
     * index: 列的號, 0表示第一列
     *
     */
    /**
     * 入庫時間
     */

    @ExcelProperty(value = "姓名", index = 0)
    private String name;
    /**
     * 供應商
     */
    @ExcelProperty(value = "年齡", index = 1)
    private String age;
    /**
     * 紙筒編號
     */
    @ExcelProperty(value = "性別", index = 2)
    private String sex;
 
}

測試demo

public void test(){
       List<User > list = new HashList<>();       
      for(int i=0;i<10000;i++){
      User user = new User();
      user.setName( UUID.randomUUID().toString());
      user.setAge("10");
      user.setSex("男");
      list.add(user);
      }
    ExcelUtil.writeExcel(response,list,"test","testsheet",user.getClass());
    }

雖然是阿里的插件 但還是建議使用正式版 不要使用beta版本 難免會有其他的問題

正式版 2.0.2 版本介紹鏈接:https://blog.csdn.net/weixin_42083036/article/details/102802644

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章