Springboot的excel导出

这里导出excel用到的是 阿里巴巴的easyexcel

1、首先导入依赖

 
 
       com.alibaba
       easyexcel
       2.1.6

2、对需要导出的实体类加注解

@ExcelProperty("商品编号")
private Integer id;
@ExcelProperty("商品名称")
private String name;
@ExcelProperty("商品价格")
private Float price;
@ExcelProperty("商品购买数量")
private Integer buynum;
@ExcelProperty("商品库存")
private Integer num;

3、下载接口

  • 准备一个List格式的数据。
  • 将响应数据设置为excel格式。
  • 写入数据。Easyexcle提供了API供用户使用,只需要一行代码就能够将List列表转化为Excel文件。write方法指定输出流和写入数据的class对象;sheet方法指定excel的sheet名称;doWrite则指定写入的列表数据。
@GetMapping("/download")
public void download(HttpServletResponse response) {
    try {
        // 准备数据
        List Goodslist = new ArrayList<>(10);
        for (int i = 0; i < 10; i++) {
            GoodsDo s = new GoodsDo();
            s.setId(i * 10 + 1);
            s.setName("name" + i);
            s.setBuynum(i);
            s.setNum(20+i);
            s.setPrice(2.11+i);
            Goodslist.add(s);
        }

        // 设置响应
        response.setContentType("application/vnd.excel");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("file", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");

        // 写入数据
        EasyExcel.write(response.getOutputStream(), GoodsDo.class).sheet("sheet1").doWrite(Goodslist);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

访问http://localhost:8081/easyexcel/doenload下载excel

Springboot的excel导出_第1张图片

写入

1、指定写入

@ExcelProperty(value="主标题",index=0)

可用index指定写入哪一列

2、合并列(参照商品编号和商品名)

@ExcelProperty({"主标题","商品编号"})
private Integer id;
@ExcelProperty({"主标题","商品名称"})
private String name;
@ExcelProperty("商品价格")
private Double price;
@ExcelProperty("商品购买数量")
private Integer buynum;
@ExcelProperty("商品库存")
private Integer num;

Springboot的excel导出_第2张图片

3、格式转换

给实体类加注解

//格式转换为xx年xx月xx时xx分xx秒
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
@ExcelProperty("日期标题")
private Date date;
//给每个数字后边加%
@NumberFormat("#.##%")
@ExcelProperty(value = "数字标题")    
private Double doubleData;

4、重复写(写到单个或多个sheet)

1、 写到同一个sheet,只创建一次sheet

String fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";
// 这里需要指定写用哪个class去写
try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {
    // 这里注意 如果同一个sheet只要创建一次
    WriteSheet writeSheet = EasyExcel.writerSheet("模板").build();
    // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
    for (int i = 0; i < 5; i++) {
        // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
        List data = data();
        excelWriter.write(data, writeSheet);
    }
}

2、写到不同sheet,把创建sheet语句放到循环里,且sheetNo要变化

fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";
    // 这里指定文件
    try (ExcelWriter excelWriter = EasyExcel.write(fileName, DemoData.class).build()) {
        // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面
        for (int i = 0; i < 5; i++) {
            // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样
            WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).build();
            // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
            List data = data();
            excelWriter.write(data, writeSheet);
        }
    }

3、写到不同sheet,但是是不同对象。

fileName = TestFileUtil.getPath() + "repeatedWrite" + System.currentTimeMillis() + ".xlsx";
    // 这里 指定文件
    try (ExcelWriter excelWriter = EasyExcel.write(fileName).build()) {
        // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来。这里最终会写到5个sheet里面
        for (int i = 0; i < 5; i++) {
            // 每次都要创建writeSheet 这里注意必须指定sheetNo 而且sheetName必须不一样。这里注意DemoData.class可以每次都变
            // 实际上可以一直变
            WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(DemoData.class).build();
            // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
            List data = data();
            excelWriter.write(data, writeSheet);
        }
    }

你可能感兴趣的:(java,spring,boot)