easypoi模板导入/模板导出~~一文搞定

----------------------------------话不多说直接开始

//传参
// fileName 为导出模板
excelUtil.exportExcelTemplate(response,fileName,newsPriceVoList);
//TEMPLATE   是服务器存放文件得路径
//方法
public static void exportExcelTemplate(HttpServletResponse response, String fileName,List<?> data) throws IOException {
    TemplateExportParams params = new TemplateExportParams(TEMPLATE + fileName, true);
    Map<String, Object> stringObjectHashMap = new HashMap<>();
    stringObjectHashMap.put("list",data);
    response.setHeader("Content-Disposition",
            "attachment;filename=" + new String(fileName.getBytes("UTF-8"), "iso8859-1"));
    response.setContentType("application/vnd.ms-excel;charset=UTF-8");
    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    BufferedOutputStream bufferedOutPut = new BufferedOutputStream(response.getOutputStream());
    Workbook workbook = ExcelExportUtil.exportExcel(params,stringObjectHashMap);
    workbook.write(bufferedOutPut);
    bufferedOutPut.flush();
    bufferedOutPut.close();
}
//实体类需要对应下图字段 字段具体可以参照easyPoi官方文档
public class student{
//实体类对应模板表格示例
public String name;
public String classpublic String sex;
}

注意一定有闭口{{}}括号 t可以不加,属性字段对应的实体类中的字段
在这里插入图片描述

----------------------------分割线,导出到此结束。下边开始导入--------------------------
导入需要注意的点是导入模板和实体类中easy的注解需要对应
·····实体类

//先上实体类 注意要实现IExcelModel 和 IExcelDataModel  两个easypoi接口
@Data
public class StudentExport implements Serializable, IExcelModel, IExcelDataModel {

		//非空判断
    @NotBlank(message = "学生姓名不能为空")
    //对应的excel表 表头信息
    @Excel(name="学生姓名)")
    //长度信息
    @Length(max = 30,message = "长度不可超出30字符")
    private String name;


    @NotBlank(message = "班级名称不能为空")
    @Excel(name="班级名称")
    @Length(max = 50,message = "长度不可超出50字符")
    private String class;

   
    @Excel(name="性别")
    private String companyType;

   //注意 errorMsg; 和 rowNum; 参数一定要进行构造 因为errormsg是主要反应报错信息,比如
   //学生姓名为空了 在导入的时候这条数据的错误信息就是 -->  
   //学生姓名不能为空 (对应  @NotBlank或者  @Length 里边的 message)
    private String errorMsg;

    private int rowNum;

    @Override
    public String getErrorMsg() {
        return errorMsg;
    }

    @Override
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }

    @Override
    public int getRowNum() {
        return rowNum;
    }

    @Override
    public void setRowNum(int rowNum) {
        this.rowNum = rowNum;
    }
}

··导入方法

//传参
 mallUtil.supplierBatchAdd(file)
//方法
 public Map supplierBatchAdd(MultipartFile file) {

            if (!file.isEmpty()) {
                //文件名称
                int begin = Objects.requireNonNull(file.getOriginalFilename()).indexOf(".");
                //文件名称长度
                int last = file.getOriginalFilename().length();
                if (file.getSize() > 5242880) {
                    throw new IllegalArgumentException("上传文件不可超5M");
                }
                //判断文件格式是否正确
                String fileName = file.getOriginalFilename().substring(begin, last);
                if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")) {
                    throw new IllegalArgumentException("上传文件格式有误,仅支持xls、xlsx文件");
                }
            } else {
                throw new IllegalArgumentException("该文件无数据");
            }
            //使用EasyPoi获取文件数据
            ImportParams params = new ImportParams();
            //标题(设置忽略的行,字段列前几行)
            params.setTitleRows(5);
            //表头(列字段占几行)
            params.setHeadRows(1);
            //设置验证支持 验证支持开开之后才会判断实体类中的限制i套件
            params.setNeedVerify(true);
            //设置读取行数(默认从0开始)
            params.setReadRows(299);
            ExcelImportResult<StudentExport > result;
            List<StudentExport > failList = new ArrayList<>();
            try {
                result = ExcelImportUtil.importExcelMore(file.getInputStream(), StudentExport .class, params);
            } catch (Exception e) {
                throw new IllegalArgumentException(e.getMessage());
            }
            if (result != null) {
                if (result.isVerfiyFail()) {
                    failList = result.getFailList().stream().filter(b -> !BeanUtil.isEmpty(b, "errorMsg", "rowNum")).collect(Collectors.toList());
                }
                if (Integer.sum(result.getList().size(), failList.size()) == 0) {
                    throw new IllegalArgumentException("该文件无数据");
                }

               //可以执行新增操作,也可以进行各种逻辑处理方法改造性很强
               //一定要注意有两个list  一个 failList 是错误数据的集合  result.getList() 
               //是正确数据的集合 可以对这两个集合进行操作

               //这个map是我自己处理逻辑的操作
                return   map;
            }
       
  
    }

导入不难看出导入的匹配规则是根据 excel表的表头进行匹配的
在这里插入图片描述
注意一定要实体类和表头对应进行导入


本文结束。有问题留言文章持续更新


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
easypoi是一个用于Excel和Word文档操作的Java库。它提供了简单易用的API,可以通过模板导出Excel文件。下面是使用easypoi进行模板导出的示例代码: 1. 导入easypoi的maven坐标: ```xml <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.2.0</version> </dependency> ``` 2. 在Spring Boot的配置文件(bootstrap.yml或application.yml)中配置模板的URL: ```yaml easypoi: template: 'http://www.xxx.cn/statics/template/port.xlsx' ``` 3. 使用easypoi进行模板导出: ```java import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import org.apache.poi.ss.usermodel.Workbook; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.Map; public class TemplateExportDemo { public static void main(String[] args) throws IOException { // 模板文件的URL String templateUrl = "http://www.xxx.cn/statics/template/port.xlsx"; // 下载模板文件 URL url = new URL(templateUrl); URLConnection connection = url.openConnection(); InputStream inputStream = connection.getInputStream(); // 加载模板文件 Workbook workbook = ExcelExportUtil.importExcel(inputStream); // 创建模板参数 TemplateExportParams params = new TemplateExportParams(); params.setSheetNum(0); // 指定导出的Sheet页 // 创建数据模型 Map<String, Object> dataModel = new HashMap<>(); dataModel.put("name", "John"); dataModel.put("age", 25); // 导出Excel文件 FileOutputStream outputStream = new FileOutputStream("output.xlsx"); ExcelExportUtil.exportExcel(params, dataModel, workbook.getSheetAt(params.getSheetNum()), outputStream); // 关闭流 outputStream.close(); inputStream.close(); } } ``` 这段代码会从指定的URL下载模板文件,然后根据模板和数据模型生成新的Excel文件。你可以根据自己的需求修改模板文件和数据模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值