1. /**
  2. * 导入信息
  3. */
  4. @Override
  5. public List<Object> add(HttpServletRequest request) {
  6. // TODO Auto-generated method stub
  7. List<Object> num=new ArrayList<Object>();
  8. MultipartHttpServletRequest multipartRequest =(MultipartHttpServletRequest) request;
  9. CommonsMultipartFile file = (CommonsMultipartFile)multipartRequest.getFile("zlUpload");
  10. if(file!=null){
  11. try {
  12. num = save(file.getInputStream());
  13. } catch (IOException e) {
  14. // TODO Auto-generated catch block
  15. e.printStackTrace();
  16. }
  17. }
  18. returnnum;
  19. }
  20. /**
  21. * 保存上传的Excel信息
  22. */
  23. private List<Object> save(InputStream inputStream) throwsIOException {
  24. // TODO Auto-generated method stub
  25. List<Object> error_num = new ArrayList<Object>();
  26. List<Object> temp =(List<Object>)readXls(inputStream,error_num);
  27. System.out.println(temp.get(0).getClass().getName());
  28. if(temp.get(0).getClass().getName().equals("org.apache.poi.hssf.usermodel.HSSFCell")){
  29. return error_num;
  30. }else{
  31. TStudentNo student = null;
  32. List<TStudentNo> studentList = newArrayList<TStudentNo>();
  33. for(int i=0;i<temp.size();i++){
  34. student = (TStudentNo)temp.get(i);
  35. studentList.add(student);
  36. }
  37. try {
  38. //在插入数据前进行判断,看数据库中是否有不允许重复的字段出现,以打断保存进度
  39. int repeat = 0;
  40. for(int j = 0;j<studentList.size();j++){
  41. TStudentNo Studenttemp =studentMapper.findByStudentNo(studentList.get(j).getStudent_no());
  42. //如果查到了,重复数加一,然后跳过不保存
  43. if(Studenttemp!=null){
  44. repeat++;
  45. }
  46. }
  47. if(repeat==0){
  48. for(int z=0;z<studentList.size();z++){
  49. studentMapper.saveStudent(studentList.get(z));
  50. }
  51. }else{
  52. error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");
  53. return error_num;
  54. }
  55. } catch (Exception e) {
  56. //判断Excel中是否有重复数据,如果有重复跳过保存异常
  57. error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");
  58. return error_num;
  59. }
  60. return temp;
  61. }
  62. }
  63. /**
  64. * 逐行遍历其Excel
  65. */
  66. private Object readXls(InputStream inputStream,List<Object>error_num) throws IOException {
  67. InputStream is = new BufferedInputStream(inputStream);
  68. HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
  69. TStudentNo student = null;
  70. List<TStudentNo> list = new ArrayList<TStudentNo>();
  71. //循环工作表Sheet
  72. for(int numSheet =0;numSheet<hssfWorkbook.getNumberOfSheets();numSheet++){
  73. HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
  74. if(hssfSheet == null){
  75. continue;
  76. }
  77. for(int rowNum =2;rowNum<=hssfSheet.getLastRowNum();rowNum++){
  78. System.out.println(hssfSheet.getLastRowNum());
  79. HSSFRow hssfRow = hssfSheet.getRow(rowNum);
  80. //检查每行的空格数,如果小于4证明有一个或多个空格,但不是整行
  81. if(CheckRowNull(hssfRow)<4){
  82. student = new TStudentNo();
  83. HSSFCell name = hssfRow.getCell(0);
  84. HSSFCell student_no = hssfRow.getCell(1);
  85. HSSFCell phone = hssfRow.getCell(2);
  86. HSSFCell class_no = hssfRow.getCell(3);
  87. HSSFCell subject_category = hssfRow.getCell(4);
  88. List<HSSFCell> temp = new ArrayList<HSSFCell>();
  89. temp.add(0, name);
  90. temp.add(1, student_no);
  91. temp.add(2, phone);
  92. temp.add(3, class_no);
  93. temp.add(4, subject_category);
  94. int temp1 = 0;//用于跳出双层for循环
  95. for(int i=0;i<5;i++){
  96. //为记录前台进行提示某行某列出错
  97. temp1 = CheckRowError(temp.get(i),error_num,rowNum,i);
  98. if(temp1==-1){
  99. break;
  100. }
  101. }
  102. if(temp1==-1){
  103. return temp;
  104. }
  105. student.setName(getCellValue(name));
  106. student.setPhone(getCellValue(phone));
  107. student.setStudent_no(getCellValue(student_no));
  108. student.setClass_no(getCellValue(class_no));
  109. student.setSubject_category(Integer.parseInt(getCellValue(subject_category)));
  110. list.add(student);
  111. }else{
  112. continue;
  113. }
  114. }
  115. }
  116. return list;
  117. }
  118. /**
  119. * 对Excel的各个单元格的格式进行判断并转换
  120. */
  121. private String getCellValue(HSSFCell cell) {
  122. String cellValue = "";
  123. DecimalFormat df = newDecimalFormat("#");
  124. switch (cell.getCellType()) {
  125. case HSSFCell.CELL_TYPE_STRING:
  126. cellValue =cell.getRichStringCellValue().getString().trim();
  127. break;
  128. case HSSFCell.CELL_TYPE_NUMERIC:
  129. cellValue =df.format(cell.getNumericCellValue()).toString();
  130. break;
  131. case HSSFCell.CELL_TYPE_BOOLEAN:
  132. cellValue =String.valueOf(cell.getBooleanCellValue()).trim();
  133. break;
  134. case HSSFCell.CELL_TYPE_FORMULA:
  135. cellValue =cell.getCellFormula();
  136. break;
  137. default:
  138. cellValue = "";
  139. }
  140. return cellValue;
  141. }
  142. //判断某行某列有问题
  143. private int CheckRowError(HSSFCell cell,List<Object>error_num,int rowNum,int cell_num){
  144. //判断各个单元格是否为空
  145. if(cell==null||cell.equals("")||cell.getCellType() ==HSSFCell.CELL_TYPE_BLANK){
  146. error_num.add("出错啦!请检查第"+(rowNum+1)+"行第"+(cell_num+1)+"列。"+"如果您在该行没有数据,建议您选择删除该行,重试!");
  147. return -1;
  148. }
  149. return 0;
  150. }
  151. //判断行为空
  152. private int CheckRowNull(HSSFRow hssfRow){
  153. int num = 0;
  154. Iterator<Cell> cellItr =hssfRow.iterator();
  155. while(cellItr.hasNext()){
  156. Cell c =cellItr.next();
  157. if(c.getCellType() ==HSSFCell.CELL_TYPE_BLANK){
  158. num++;
  159. }
  160. }
  161. return num;
  162. }

Java的poi技术遍历Excel时进行空Cell,空row,判断的更多相关文章

  1. java的poi技术写Excel的Sheet

    在这之前写过关于java读,写Excel的blog如下: Excel转Html java的poi技术读,写Excel[2003-2007,2010] java的poi技术读取Excel[2003-20 ...

  2. java的poi技术读取Excel[2003-2007,2010]

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  3. java的poi技术读取Excel数据

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  4. java的poi技术读取Excel[2003-2007,2010]

    这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...

  5. java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

  6. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  7. java的poi技术读,写Excel[2003-2007,2010]

    在上一篇blog:java的poi技术读取Excel[2003-2007,2010] 中介绍了关于java中的poi技术读取excel的相关操作 读取excel和MySQL相关: java的poi技术 ...

  8. java的poi技术读取和导入Excel实例

    本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下. 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用 ...

  9. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

随机推荐

  1. [bzoj2456]mode 题解

    改题改自闭的时候当然要靠水题来调节心情(逃 2456: mode Time Limit: 1 Sec  Memory Limit: 1 MBSubmit: 8461  Solved: 3171[Sub ...

  2. php+js实现极验滑块拖动验证码-tncode

    先上图: 演示地址:http://aso.39gs.com/tncode/index.html 相信在淘宝,斗鱼这些大网站都见到过这样的验证码了,拖动验证码比传统在移动端有更好的化验,减少用户的输入. ...

  3. windows shell命令和快捷键

    // 这下面的宏,貌似都能通过shell:调用 // SHGetSpecialFolderLocation // // Caller should use SHGetMalloc to obtain ...

  4. Opengl 之 窗口初体验 ------ By YDD的铁皮锅

    大二的时候开始想着做游戏,因为学校的课程实在是无聊就想着做些有意义的事情.毕竟学了编程这一行就得做些实事,于是就在网上搜了一下图形编程,偶然的了解到了Opengl (同时还有Windows上的Dire ...

  5. Module not found: Error: Can't resolve '@babel/runtime/helpers/classCallCheck' and Module not found: Error: Can't resolve '@babel/runtime/helpers/defineProperty'

    These two mistakes are really just one mistake, This is because the following file @babel/runtime ca ...

  6. 实用maven笔记四-打包&其他

    通过使用maven的生命周期和丰富多样的插件,可以方便的将项目代码编译打包为自己需要的构件. maven默认项目主代码位置src/main/java目录,测试代码位置src/test/java目录.主 ...

  7. linux中常用的命令大全

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  8. 注解深入浅出之Retrofit中的注解(三)

    更多andorid高级架构进阶视频免费分享学习请点击:https://space.bilibili.com/474380680 Retrofit中的注解 @Query,@QueryMap,@Field ...

  9. c# Winform实现发送邮件

    邮件发送类 来源网上 稍作调整...出处忘了 /** * 命名空间: EmailSend * 类 名: EmailSend * * 作者        变更内容            变更日期 * ─ ...

  10. 迭代器,生成器,yield,yield from理解

    迭代器 说到迭代器就得想说可迭代对象Iterable,实现了__iter__()方法的对象都是可迭代对象,例如很多容器,list ,set, tuples.使用iter方法可以把一个可迭代对象变成迭代 ...