阿里的easyExcel的使用解析

目录

一、导入easyExcel的依赖

二、构建导出的实体类

三、下载接口

3.1、下载excel文件

 四、在文件中写入

4.1、指定写入

4.2、合并列

 4.3、格式转换

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


一、导入easyExcel的依赖

   <!--阿里easyExcel-->
   <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>easyexcel</artifactId>
      <version>3.1.3</version>
   </dependency>

二、构建导出的实体类

实体类属性要记得加注解

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

/**
 * excel
 *
 * @author yunyan
 * @date 2023/5/26
 */
@Data
public class ExcelDO {
    @ExcelProperty("商品编号")
    private Integer id;
    @ExcelProperty("商品名称")
    private String name;
    @ExcelProperty("商品价格")
    private Float price;
    @ExcelProperty("商品购买数量")
    private Integer buyNum;
    @ExcelProperty("商品库存")
    private Integer num;
}

三、下载接口

  • 准备一个List格式的数据。
  • 将响应数据设置为excel格式。
  • 写入数据。Easyexcle提供了API供用户使用,只需要一行代码就能够将List列表转化为Excel文件。write方法指定输出流和写入数据的class对象; sheet方法指定excel的sheet名称; doWrite则指定写入的列表数据。
import com.alibaba.excel.EasyExcel;
import com.example.testinterface.entity.ExcelDO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

/**
 * excel测试控制器
 *
 * @author yunyan
 * @date 2023/5/26
 */
@RestController
@RequestMapping("/easyExcel")
public class TestExcelController {

    @GetMapping("/download")
    public void download(HttpServletResponse response){
        try {
            //准备数据
            List<ExcelDO> excelDOList =new ArrayList<>(10);
            for (int i = 0; i < 10; i++) {
                ExcelDO excelDO =new ExcelDO();
                excelDO.setId(i*10+1);
                excelDO.setName("name"+i);
                excelDO.setBuyNum(i);
                excelDO.setNum(20+i);
                excelDO.setPrice(2.11F+i);
                excelDOList.add(excelDO);
            }

            //设置响应
            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(), ExcelDO.class).sheet("sheet1").doWrite(excelDOList);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

3.1、下载excel文件

访问http://localhost:8080/easyExcel/download将excel文件下载到浏览器默认下载的位置

文件打开如下图所示

 四、在文件中写入

4.1、指定写入

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

可使用index指定写入哪一列

4.2、合并列

/**
 * excel
 *
 * @author yunyan
 * @date 2023/5/26
 */
@Data
public class ExcelDO {
    @ExcelProperty({"主标题", "商品编号"})
    private Integer id;
    @ExcelProperty({"主标题","商品名称"})
    private String name;
    @ExcelProperty("商品价格")
    private Float price;
    @ExcelProperty("商品购买数量")
    private Integer buyNum;
    @ExcelProperty("商品库存")
    private Integer num;
}

将需要合并的列和用大括号和合并列名括起来

 4.3、格式转换

给实体类加相关注解

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

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

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

String fileName = TestFileutil.getPath() +"repeatedWrite" + System.currentTimewillis() +".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<DemoData> data = data();
    excelWriter.write(data,writeSheet);
    }
}

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

fileName = TestFileUtil.getPath() + "repeatedwrite" + System.currentTimewillis() + ".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<DemoData> 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<DemoData> data = data();
            excelWriter.write(data, writeSheet);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_54247497/article/details/130893796
今日推荐