生成文件和导出文件分开操作

引入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

实体类中配置

然后可以直接在实体类中配置表头,@ExcelProperty()就是用来设置表头的,也可以这样写:@ExcelProperty(value=“名称”,index=索引),如果不需要某个字段,可以使用@ExcelIgnore注解忽略;此外@ExcelProperty()还有很多配置各种类型的表头,详情可以参考EasyExcel官方文档

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

import java.util.Date;

/**
 * @Author:RiverGods
 * @Date:2023/4/21 16:51
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ClubMember {
      @ExcelProperty("主键")
      private Long id;
      @ExcelProperty("姓名")
      private String name;
      @ExcelProperty("手机号")
      private String phone;
      @ExcelProperty("状态")
      private String status;
      @ExcelProperty("创建时间")
      private Date createAt;
      @ExcelProperty("会员有效期起始时间")
      private Date effectiveStartAt;
      @ExcelProperty("会员有效期结束时间")
      private Date effectiveEndAt;
}

导出:

controller

@PostMapping("/ExportExcel")
    public String ExportExcel(HttpServletResponse response){
        return clubMemberService.ExportExcel(response);
    }

service



    @Override
    public String ExportExcel(HttpServletResponse response) {
        List<ClubMember> clubMembers = clubMemberMapper.selectList(null);
        // 设置文件导出的路径
        String realPath = "F://temp/";
        File folder = new File(realPath);
        if (!folder.isDirectory()) {
            folder.mkdirs();
        }
        String fileName = realPath + "会员信息表" + System.currentTimeMillis() + ".xlsx";
        // 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为用户表 然后文件流会自动关闭
        EasyExcel.write(fileName, ClubMember.class).sheet("会员信息表").doWrite(clubMembers);
        return fileName;
    }

文件下载-controller


    @GetMapping("/downloadExcel")
    public void downloadExcel(String downloadPath, HttpServletRequest request, HttpServletResponse response) throws IOException {
        clubMemberService.downloadExcel(downloadPath,request,response);
    }

文件下载-service


    @Override
    public void downloadExcel(String downloadPath, HttpServletRequest request, HttpServletResponse response) throws IOException {
        FileInputStream in = null;
        OutputStream out = null;
        try {
            //获取文件名
            String filename = downloadPath.substring(downloadPath.lastIndexOf("/")+1);
            filename = new String(filename.getBytes("UTF-8"),"UTF-8");

            String downloadpath = downloadPath;
            //如果文件不存在
			/*if(!file.exists()){
			    return false;
			}*/
            // 设置强制下载不打开
            response.setContentType("application/force-download");
            //设置响应头,控制浏览器下载该文件
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
            //读取要下载的文件,保存到文件输入流
            in= new FileInputStream(downloadpath);
            //创建输出流
            out= response.getOutputStream();
            //缓存区
            byte buffer[] = new byte[1024];
            int len = 0;
            //循环将输入流中的内容读取到缓冲区中
            while((len = in.read(buffer)) > 0){
                out.write(buffer, 0, len);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭
            in.close();
            out.close();
        }

    }
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐