项目笔记之EasyPoi的使用

混江龙づ霸主 提交于 2019-12-25 10:43:11

项目笔记之EasyPoi的使用

官方文档教程网址:http://easypoi.mydoc.io/

业务需求,以及应用场景:

项目中需要实现表格的导出导入

使用技术

springboot,easyPoi

此处只写实现代码,不写详细解释,详细解释说明可参考文档
实体类:

package com.huiani.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelCollection;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.Column;
import javax.persistence.Id;
import java.util.Date;
import java.io.Serializable;
import java.util.List;

/**
 * (Album)实体类
 *
 * @author makejava
 * @since 2019-12-06 11:47:31
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class Album implements Serializable {
    @Id
    @Excel(name = "专辑编号",width = 50,needMerge = true)
    private String id;
    @Excel(name = "专辑标题",needMerge = true)
    private String title;
    
    private String content;
    @Excel(name = "专辑作者",needMerge = true)
    private String author;
    
    private String boyin;
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "addTime")
    @Excel(name = "添加时间",width = 30,format = "yyyy-MM-dd")
    private Date addTime;
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "updateTime")
    private Date updateTime;
    @Excel(name = "封面",width =30,height = 15,type = 2,needMerge = true)
    private String src;
    
    private Integer amount;
    @ExcelCollection(name = "专辑下对应的章节")
    private List<Chapter> chapters;
    
    private Double score;
    
    private String state;


}

控制器层代码:

 //导出专辑表格一对多导出
    @RequestMapping("exportAlbum")
    public  void exportAlbum(HttpServletRequest request, HttpServletResponse response){
        //因为导出需要导出图片,所以此处需要获取图片文件夹的绝对路径
        String realPath = request.getSession().getServletContext().getRealPath("/img");
        //查出数据库信息专辑信息
        List<Album> albums = albumService.findAll1();
        for (Album album : albums) {
            Chapter chapter=new Chapter();
            chapter.setAlbumId(album.getId());
            //查询专辑下面的章节
            List<Chapter> chapters = chapterDao.select(chapter);
            //把章节信息存进专辑内
            album.setChapters(chapters);
            //获取图片路径既是文件名加后缀名
            String src = album.getSrc();
            //从新设置一下图片路径,方便导出时寻找图片位置
            album.setSrc(realPath+"/"+src);
        }
        //生成表格文档,设置标题,以及一对多的标题
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("所有专辑统计", "章节"),Album.class,albums);
        try {
            //设置表格名字
            String filename="专辑信息"+new Date().toString()+".xls";
            //设置响应类型
            response.setContentType("application/vnd.ms-excel");
            //设置响应头
            response.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
            //用流写
            workbook.write(response.getOutputStream());
            //关闭流
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

注意事项:
@Excel(name = “封面”,width =30,height = 15,type = 2,needMerge = true)
private String src;
此处可参考文档 属性type表示保存形式2为图片,默认1为文本 needMerge为是否纵向合并单元格

官方给的注解文档
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!