阿里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

发布了47 篇原创文章 · 获赞 30 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42083036/article/details/102801907