当前位置:   article > 正文

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

1.1.2-beta5

阿里easyExcel系列

1、阿里easyExcel使用—上(1.1.2-beta5版本)
2、阿里easyExcel使用—下(easyExcel2.0.0 版本)
3、阿里easyExcel使用—补(easyExcel2.1.6 版本)

在这里插入图片描述
源码地址:https://github.com/alibaba/easyexcel
一、jar包依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>1.1.2-beta5</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

本版本是阿里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);
        }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
样式类     在网上拷贝过来的样式类的基础上进行了内存优化 速度优化
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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

实体映射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;
 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

测试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());
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

虽然是阿里的插件 但还是建议使用正式版 不要使用beta版本 难免会有其他的问题

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/算法编织者2/article/detail/61077
推荐阅读
相关标签
  

闽ICP备14008679号