简单的EXCEL导入实战(错误数据记录原因,正确数据入库)

简介: 简单的EXCEL导入实战(错误数据记录原因,正确数据入库)

以导入招生信息为例

在这里插入图片描述

  1. 首先在项目pom文件中引入
  <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>3.0.3</version>
        </dependency>
  1. 根据EXCEL生成对应的实体类(该类实现IExcelModel接口)

    • 可以通过注解做一些基本校验
    • 继承IExcelModel为了记录错误数据的原因
@Data
public class  AutonomyApplicantsAdminMode implements IExcelModel{
    @Excel(name = "姓名")
    @NotBlank
    @Pattern(regexp = "[\\u4E00-\\u9FA5]{2,5}", message = "姓名中文2-5位")
    private String name;
    @Excel(name = "招录省份")
    private String province;
    @Excel(name="年份")
    private String year;
    @Excel(name = "性别")
    private String sex;
    @Excel(name = "准考证号")
    private String confirmation;
    @Excel(name = "证件类型")
    private String certificateType;
    @Excel(name = "证件号码")
    private String certificateNo;
    @Excel(name = "联系电话")
    private String mobile;
    @Excel(name = "毕业学校")
    private String graduateInstitutions;
    @Excel(name = "专业课成绩")
    private String majorScore;
    @Excel(name = "文化课成绩")
    private String cultureScore;
    @Excel(name = "调剂")
    private String whether;
    @Excel(name = "报考志愿")
    private String volunteerIds;
    @Excel(name = "考试科目")
    private String examinationSubjects;
    private String errorMsg;
  1. 创建校验数据的处理类(该类实现IExcelVerifyHandler接口 )
  • 以下代码具体业务处理不用关心,可以不看
  • 在重写的方法中做数据校验,传入的参数object就是EXCEL每行数据对应的实体类对象,可以对所有字段进行校验(比如数据库中是否 存在,数据转换等等)
  • 在这里插入图片描述
public class AutonomyApplicantsAdminExcelHandler implements IExcelVerifyHandler {

    private static ApplicantsAdminDao applicantsAdminDao;
    private static MajorDao majorDao;
    static {
        TwoTuple<ApplicantsAdminDao, MajorDao> bean = SpringUtil.getBean(ApplicantsAdminDao.class, MajorDao.class);
        applicantsAdminDao=bean.first;
        majorDao=bean.second;
    }
        @Override
    public ExcelVerifyHanlderResult verifyHandler(Object obj) {
        StringBuffer msg=new StringBuffer();
        ExcelVerifyHanlderResult excelVerifyHanlderResult = new ExcelVerifyHanlderResult();
        if(obj instanceof AutonomyApplicantsAdminMode){
//--------------------------------------------------------------------------------------------------------------------------
                //校验报考志愿
                
//-----------------------------------------------------------------------------------------------------------------------
                //校验证件号是否唯一
            
//-----------------------------------------------------------------------------------------------------------------------
                //判断准考证号是否唯一
            
//end--------------------------------------------------------------------------------------------------------------------
            if(msg!=null&&StringUtils.isNotBlank(msg.toString())){
                excelVerifyHanlderResult.setMsg(msg.toString());
                excelVerifyHanlderResult.setSuccess(false);
            }else {
                excelVerifyHanlderResult.setSuccess(true);
            }
        }
        return excelVerifyHanlderResult;
    }
}
  1. 最后数据业务处理类

-new 一个数据处理的处理类 List item

  • 调用工具类方法返回result

result.getList()返回正确数据list集合;
result.getFailList()返回错误数据list集合;
result.getFailWorkbook();返回错误数据的Workbook

@Service
public class ExcelImportServicempl implements ExcelImportService {
    
     * @return
     */
    @Override
    public ExcelImportOutputVO AutonomyExcelImport(MultipartFile file) {
        ExcelImportOutputVO excelImportOutputVO=new ExcelImportOutputVO();
        IExcelVerifyHandler excelHandler = new AutonomyApplicantsAdminExcelHandler();
        ExcelImportResult<AutonomyApplicantsAdminMode> result= ImportExcelUtil.asMultipartFileObtain(file,AutonomyApplicantsAdminMode.class,excelHandler);
        List<AutonomyApplicantsAdminMode> succList = result.getList();
       //正确数据处理
        ...........................
        //错误数据处理
        if(result.isVerfiyFail()){
           
            Workbook failWorkbook = result.getFailWorkbook();
          

        }
        return excelImportOutputVO;
    }
}

工具类方法贴出:

 /**
     *      获取数据集
     * @param file
     *            一个代表型的类(往往用来代表要上传的文件)
     * @param pojoClass
     *            Excel对象Class
     * @param excelVerifyHandler
     *            实现IExcelVerifyHandler接口的类(拓展一些自定义的错误校验)
     */

    public static <T>ExcelImportResult<T> asMultipartFileObtain(MultipartFile file, Class<T> pojoClass, IExcelVerifyHandler excelVerifyHandler){
        ImportParams importParams = new ImportParams();
        // 数据处
        importParams.setVerifyHanlder(excelVerifyHandler);
        // 需要验证
        importParams.setNeedVerfiy(true);
        ExcelImportResult result=null;
        try {
           result = ExcelImportUtil.importExcelMore(file.getInputStream(),pojoClass,
                    importParams);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

-------------------结束

目录
相关文章
|
1月前
|
SQL 缓存 easyexcel
面试官问10W 行级别数据的 Excel 导入如何10秒处理
面试官问10W 行级别数据的 Excel 导入如何10秒处理
180 0
|
2月前
|
安全 Java 数据库连接
jdbc解析excel文件,批量插入数据至库中
jdbc解析excel文件,批量插入数据至库中
21 0
|
2月前
|
Java API Apache
使用AOP+反射实现Excel数据的读取
使用AOP+反射实现Excel数据的读取
|
2月前
|
SQL 数据可视化 数据处理
使用SQL和Python处理Excel文件数据
使用SQL和Python处理Excel文件数据
57 0
|
8天前
|
存储 API C#
C# 实现格式化文本导入到Excel
C# 实现格式化文本导入到Excel
|
17天前
|
Java Apache
java读取excel数据案例
Java代码示例使用Apache POI库读取Excel(example.xlsx)数据。创建FileInputStream和XSSFWorkbook对象,获取Sheet,遍历行和列,根据单元格类型(STRING, NUMERIC, BOOLEAN)打印值。需引入Apache POI库并确保替换文件路径。
11 1
|
21天前
|
数据库
如何把Excel导入到数据库中
如何把Excel导入到数据库中
11 0
|
25天前
|
easyexcel 数据库
公司大佬对excel导入、导出的封装,那叫一个秒啊
封装公司统一使用的组件的主要目标是为了简化开发人员的调用流程,避免各个项目组重复集成和编写不规范的代码。文中提到对阿里EasyExcel进行了二次封装,提供了导入和导出功能,并支持模板的导入和导出。此外,还处理了读取数据与实际保存数据不一致的情况,通过提供自定义转换器来解决。
120 0
|
1月前
|
easyexcel 数据库
【EasyExcel】第一篇:动态导入excel,生成对应数据库表
【EasyExcel】第一篇:动态导入excel,生成对应数据库表