导入,导出excel表格功能

引包

选择AutoPoi, jeecg开发的自动poi

<dependency>
   <groupId>org.jeecgframework</groupId>
    <artifactId>autopoi-web</artifactId>
    <version>1.3.2</version>
</dependency>

实体类

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
 * @Description: 教材(书)表
 * @Author: jeecg-boot
 * @Date: 2020-10-07
 * @Version: V1.0
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Textbook {

    /**
     * 教材主键
     */
    //@Excel(name = "教材主键", width = 15)
    private Integer textbooksId;
    /**
     * 教材名称
     */
    @Excel(name = "教材名称", width = 15)
    private String textbooksName;
    /**
     * 教材号
     */
    @Excel(name = "教材号", width = 15)
    private String textbooksNo;
    /**
     * 出版单位
     */
    @Excel(name = "出版单位", width = 15)
    private String publisher;
    /**
     * 内部书号
     */
    @Excel(name = "内部书号", width = 15)
    private String isbnNo;
    /**
     * 课程名称
     */
    @Excel(name = "课程名称", width = 15)
    private String courseTitle;
    /**
     * 专业名称
     */
    @Excel(name = "专业名称", width = 15)
    private String specialtyName;
    /**
     * 编者名
     */
    @Excel(name = "编者名", width = 15)
    private String editorName;
    /**
     * 版次
     */
    @Excel(name = "版次", width = 15)
    private String editionsBatch;
    /**
     * 货架号
     */
    @Excel(name = "货架号", width = 15)
    private String goodsNo;
    /**
     * 类型 0机密,1秘密,2内部,3公开
     */
    @Excel(name = "类型 0机密,1秘密,2内部,3公开", width = 15)
    private Integer textbooksType;
    /**
     * 库存量
     */
    @Excel(name = "库存量", width = 15)
    private Integer textbooksCount;
    /**
     * 出版时间
     */
    @Excel(name = "出版时间,规则yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date publicationDate;

}

工具类

import com.baidu.entity.Textbook;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class ExportXls {

    /**
     * <p>
     * 导出excel
     * </P>
     *
     * @param list  数据
     * @param clazz 类对象
     * @param title 标题
     * @author: 崔冬贤
     * @return: org.springframework.web.servlet.ModelAndView
     * @time: 2020/11/13
     */
    public static ModelAndView exportXls(List list, Class clazz, String title) {
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        mv.addObject(NormalExcelConstants.FILE_NAME, title);
        mv.addObject(NormalExcelConstants.CLASS, clazz);
        //todo 可加上导出人
        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams(title + "报表", "导出人:" + "admin", title));
        mv.addObject(NormalExcelConstants.DATA_LIST, list);
        return mv;
    }

    /**
     * <p>
     * 从请求里读取数据
     * </p>
     *
     * @param request 请求对象
     * @param clazz   类字节码对象
     * @return java.util.List<com.baidu.entity.Textbook>
     * @author 崔冬贤
     * @date 2021/8/2
     * @version V1.0
     */
    public static List<Textbook> getimportExcelTextbookList(HttpServletRequest request, Class clazz) {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
            // 获取上传文件对象
            MultipartFile file = entity.getValue();
            ImportParams params = new ImportParams();
            params.setTitleRows(2);
            params.setHeadRows(1);
            params.setNeedSave(true);
            try {
                return ExcelImportUtil.importExcel(file.getInputStream(), clazz, params);
            } catch (Exception e) {
            } finally {
                try {
                    file.getInputStream().close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

}

前段控制器接口

import com.baidu.entity.Textbook;
import com.baidu.util.ExportXls;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;

/**
 * @version V1.0
 * @description:
 * @author: 崔冬贤
 * @date: 2021/7/20
 */
@RestController
@RequestMapping("/test")
public class TestController {

    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Object importExcel(HttpServletRequest request, HttpServletResponse response) {
        List<Textbook> textbooks = ExportXls.getimportExcelTextbookList(request, Textbook.class);
        System.err.println(textbooks);
        return textbooks;
    }

    @RequestMapping(value = "/out", method = RequestMethod.GET)
    public Object out(HttpServletRequest request, HttpServletResponse response) {
        return ExportXls.exportXls(new ArrayList(),Textbook.class,"测试");
    }
}

PostMan测试

在这里插入图片描述测试导入
在这里插入图片描述
在这里插入图片描述
测试导出

详解

根据@Excel 来自动匹配
官方文档: https://www.kancloud.cn/zhangdaiscott/autopoi/1623954

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个石家庄的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值