在使用easypoi的时候发现一个问题:

出现这种情况的时候,后面的数据不会读取到,(导入数据的时候)

从源码中,看到,会跳过后面的行,有兴趣的,可以分析一下,

ExcelImportServer 这个类的代码。

解决方式,除了通过自定义函数的校验外setVerifyHanlder  ,还需要手动的去去获取数据进行数据的校验操作。

下面在自定义函数校验之外,我又手动的从excel 表中获得数据去进行校验操作,在进行手动操作的时候,可以通过断点的方式看看 sheetAt 获得的时候是否是该工作表的全部数据。

//获得失败的 excle 工作表,第一个工作表
Sheet sheetAt = excelImportResult.getFailWorkbook().getSheetAt(0);

获得是该页工作表的全部数据(我记得应该是获得全部数据)

import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult;
import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHanlderResult;
import cn.afterturn.easypoi.handler.inter.IExcelVerifyHandler;
import com.gree.first.service.StudentService;
import com.gree.first.user.daomain.Student;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.thymeleaf.util.StringUtils;import java.io.InputStream;
import java.util.Date;
import java.util.List;/*** Create by yang_zzu on 2020/7/8 on 11:02*/
public class StudentServiceImpl implements StudentService {@Overridepublic List<Student> importAll(InputStream inputStream) throws Exception {ImportParams importParams = new ImportParams();importParams.setHeadRows(1);importParams.setTitleRows(1);//是否需要基础校验importParams.setNeedVerfiy(true);//自定义函数校验importParams.setVerifyHanlder(new IExcelVerifyHandler<Student>() {@Overridepublic ExcelVerifyHanlderResult verifyHandler(Student student) {//保存提示信息StringBuilder res = new StringBuilder();try {//做一些字段的验证判断内容if (!"China".equals(student.getAddress())) {res.append("输入的地址有误!!!");}//.......等其他的判断操作} catch (Exception e) {res.append(e.getMessage());}return new ExcelVerifyHanlderResult(StringUtils.isEmpty(String.valueOf(res)), res.toString());}});ExcelImportResult<Student> excelImportResult = ExcelImportUtil.importExcelMore(inputStream, Student.class, importParams);//异常数据List<Student> failList = excelImportResult.getFailList();//需要导入的数据,这些是正常的数据List<Student> list = excelImportResult.getList();/*** 下面的操作是,获得,后面没有读取到的数据*///获得失败的 excle 工作表,第一个工作表Sheet sheetAt = excelImportResult.getFailWorkbook().getSheetAt(0);//获得最后一行的行号int lastRowNum = sheetAt.getLastRowNum();//列String cell0_value;double cell1_value;Date cell2_value;String cell3_value;//保存异常信息StringBuffer stringBuffer;//保存异常的对象信息Student studentFail;for (int i = 0; i < lastRowNum; i++) {studentFail = new Student();stringBuffer = new StringBuffer();Student student = new Student();Row row = sheetAt.getRow(i);Cell cell = row.getCell(0);Cell cell1 = row.getCell(1);Cell cell2 = row.getCell(2);Cell cell3 = row.getCell(3);//根据excel 该列设置的数据类型,进行不同数据的获取cell0_value = cell.getStringCellValue();cell1_value = cell.getNumericCellValue();cell2_value = cell.getDateCellValue();cell3_value = cell.getStringCellValue();//现在已经获得 第 i 行的,每个单元格的数据if ("XiaoMing".equals(cell0_value)) {stringBuffer.append("XiaoMing 已经存在!!!!");}studentFail.setName(cell0_value);studentFail.setAge((int) cell1_value);//......//将错误信息放到对象里面studentFail.setErrorMsg(stringBuffer.toString());//将 有问题的数据,加入到 链表中failList.add(studentFail);}if (failList.isEmpty()) {//如果 异常数据的链表为空,则说明 excel 表格中的数据全部符合导入的需求,进行正常的保存操作就可以了//...................}return excelImportResult.getFailList();}
}

这个跳过第一个单元格为空的行的方式,不能说是该框架的bug,只是说是框架解决问题的一个比较好的方法,没有那个框架是没有一点缺陷的,他们只能是以一种较好的方式去解决遇到的大部分问题。这样才比较有通用性。

这种情况,会正常的返回第一行的数据有问题,并且后面的数据也都会读取到。

easypoi读取excel文件异常相关推荐

  1. POI读取excel文件异常:.OfficeXmlFileException

    org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, t ...

  2. EasyPoi实现excel文件导入导出

    EasyPoi学习实践 1 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板 ...

  3. matlab显示服务器出现意外,Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决...

    1.问题描述: 该错误通常发生在应用函数读取excel文件(后缀xls或xlsx)时. 应用xlsread函数读取提示服务器出现意外情况: 应用importdata读取时提示can't open fi ...

  4. 两个关于.NET读取EXCEL文件的问题,记下来,很有用!

    今天有个同事问我个问题,他在用C#"Microsoft.Jet.OLEDB.4.0"读取EXCEL文件的时候,发现了一个问题,是这样的,他读出来的EXCEL数据在DATAGRID中 ...

  5. PhpSpreadsheet如何读取excel文件

    PhpSpreadsheet如何读取excel文件 一.总结 一句话总结:万能的百度,直接搜代码就好,绝对有,毕竟github上面4000+的关注,说明很多人用了这个,使用照着demo倒是异常简单 二 ...

  6. python自动读取excel文件邮箱列表,自动批量发送邮件项目(附使用方法+代码)

    python自动发送邮件项目 项目简介 使用方法 项目结构 完整项目代码 结语 项目简介 该项目功能是利用python自动读取excel文件中的邮箱列表,并批量发送邮件到目标邮箱,进行客户挖掘的.该项 ...

  7. 读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件

    读取EXCEL文件数据,再调用第三方接口,将第三方数据重新写入到EXCEL文件 工作中涉及很多提供文档数据,少则几条,多则上万,少的可以自己编辑一个,静态final来自己定义,一旦数太多得话,就得使用 ...

  8. 服务器读取excel文件,关于c#:作为服务器进程读取Excel文件

    我试图找到一种适当的方法来读取NT服务器操作系统上的Excel文件的内容. 我在使用Excel API时遇到许多问题,然后在Office Automation上遇到了正式的Microsoft,它指出E ...

  9. Java 读取excel文件内容插入到数据库

    Java读写Excel的包是Apache POI. JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel ...

最新文章

  1. 软件本地化,软件本地化公司
  2. Shell 输入/输出重定向
  3. python爬虫学习(一)
  4. 拉格朗日乘数法(一种寻找变量受一个或多个条件所限制的多元函数的极值的方法)
  5. How to solve C library not available dtaidistance
  6. linux下的环境变量/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc文件
  7. 自训练 + 预训练 = 更好的自然语言理解模型
  8. boost::intrusive::list用法的测试程序
  9. SPI的4种工作模式(备忘)
  10. 金蝶软件怎么过账_代理记账用什么财务软件?
  11. Zbrush 2019有哪些新功能需要你的探索,赶紧来看看
  12. IDEA基本使用及配置(2)
  13. Python监控Windows下的文件变化
  14. bbs小项目整理(五)(登录模块的完成)
  15. java 微信卡券开发 --创建微信卡券
  16. 银河麒麟v10_银河麒麟:V10究竟哪里好?开箱测评,瞬间明了!
  17. 夜雨数竞笔记-不定积分(1)-换元法-倒代换
  18. 基于链接密度聚类的重叠社区发现算法
  19. HDU-1238 Substrings
  20. conda错误this environment is insistent,please check the package plan carefully

热门文章

  1. Synopsys SV Lab Guide—lab3
  2. Linux运维的必备知识和素质
  3. NGINX+UWSGI+PYTHON+FLASK环境搭建——————学习笔记
  4. 项目经理职责及绩效考核标准(草案)
  5. 多路TS流播放工具PlayWnd
  6. 六个月离职空档期获得足够时间反思自我+常见Netty面试题详解
  7. python编程基础之二十七
  8. SpringBoot项目与maven分环境自动打包配置
  9. radio标签实现:只读+正常传值
  10. 简易秒杀系统-Go语言实现