• Java的poi技术遍历Excel时进行空Cell,空row,判断


    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. /** 
    22.  * 保存上传的Excel信息 
    23.  */  
    24. private List<Object> save(InputStream inputStream) throwsIOException {  
    25. // TODO Auto-generated method stub  
    26. List<Object> error_num = new ArrayList<Object>();  
    27. List<Object> temp =(List<Object>)readXls(inputStream,error_num);  
    28. System.out.println(temp.get(0).getClass().getName());  
    29. if(temp.get(0).getClass().getName().equals("org.apache.poi.hssf.usermodel.HSSFCell")){  
    30. return error_num;  
    31. }else{  
    32. TStudentNo student = null;  
    33. List<TStudentNo> studentList = newArrayList<TStudentNo>();  
    34. for(int i=0;i<temp.size();i++){  
    35. student = (TStudentNo)temp.get(i);  
    36. studentList.add(student);  
    37. }  
    38. try {  
    39. //在插入数据前进行判断,看数据库中是否有不允许重复的字段出现,以打断保存进度  
    40. int repeat = 0;  
    41. for(int j = 0;j<studentList.size();j++){  
    42. TStudentNo Studenttemp =studentMapper.findByStudentNo(studentList.get(j).getStudent_no());  
    43. //如果查到了,重复数加一,然后跳过不保存  
    44. if(Studenttemp!=null){  
    45. repeat++;  
    46. }  
    47. }          
    48. if(repeat==0){  
    49. for(int z=0;z<studentList.size();z++){  
    50. studentMapper.saveStudent(studentList.get(z));  
    51. }  
    52. }else{  
    53. error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");  
    54. return error_num;  
    55. }                                  
    56. catch (Exception e) {  
    57. //判断Excel中是否有重复数据,如果有重复跳过保存异常  
    58. error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");  
    59. return error_num;  
    60. }  
    61.    
    62. return temp;          
    63. }  
    64. }  
    65.    
    66. /** 
    67.  * 逐行遍历其Excel 
    68.  */  
    69.    
    70. private Object readXls(InputStream inputStream,List<Object>error_num) throws IOException {  
    71. InputStream is = new BufferedInputStream(inputStream);  
    72. HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);  
    73. TStudentNo student = null;  
    74. List<TStudentNo> list = new ArrayList<TStudentNo>();  
    75. //循环工作表Sheet  
    76. for(int numSheet =0;numSheet<hssfWorkbook.getNumberOfSheets();numSheet++){  
    77. HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);  
    78. if(hssfSheet == null){  
    79. continue;  
    80. }  
    81.    
    82. for(int rowNum =2;rowNum<=hssfSheet.getLastRowNum();rowNum++){  
    83. System.out.println(hssfSheet.getLastRowNum());          
    84. HSSFRow hssfRow = hssfSheet.getRow(rowNum);  
    85. //检查每行的空格数,如果小于4证明有一个或多个空格,但不是整行  
    86. if(CheckRowNull(hssfRow)<4){  
    87. student = new TStudentNo();  
    88. HSSFCell name = hssfRow.getCell(0);  
    89. HSSFCell student_no = hssfRow.getCell(1);  
    90. HSSFCell phone = hssfRow.getCell(2);  
    91. HSSFCell class_no = hssfRow.getCell(3);  
    92. HSSFCell subject_category = hssfRow.getCell(4);  
    93. List<HSSFCell> temp = new ArrayList<HSSFCell>();  
    94. temp.add(0, name);  
    95. temp.add(1, student_no);  
    96. temp.add(2, phone);  
    97. temp.add(3, class_no);  
    98. temp.add(4, subject_category);  
    99. int temp1 = 0;//用于跳出双层for循环  
    100. for(int i=0;i<5;i++){  
    101. //为记录前台进行提示某行某列出错  
    102. temp1 = CheckRowError(temp.get(i),error_num,rowNum,i);  
    103. if(temp1==-1){  
    104. break;  
    105. }  
    106. }  
    107. if(temp1==-1){  
    108. return temp;  
    109. }  
    110. student.setName(getCellValue(name));  
    111. student.setPhone(getCellValue(phone));  
    112. student.setStudent_no(getCellValue(student_no));  
    113. student.setClass_no(getCellValue(class_no));  
    114. student.setSubject_category(Integer.parseInt(getCellValue(subject_category)));  
    115. list.add(student);  
    116. }else{  
    117. continue;  
    118. }  
    119. }  
    120.    
    121. }  
    122. return list;  
    123. }  
    124.    
    125. /** 
    126.  * 对Excel的各个单元格的格式进行判断并转换 
    127.  */  
    128. private String getCellValue(HSSFCell cell) {   
    129.         String cellValue = "";   
    130.         DecimalFormat df = newDecimalFormat("#");   
    131.         switch (cell.getCellType()) {   
    132.         case HSSFCell.CELL_TYPE_STRING:   
    133.             cellValue =cell.getRichStringCellValue().getString().trim();   
    134.             break;   
    135.         case HSSFCell.CELL_TYPE_NUMERIC:   
    136.             cellValue =df.format(cell.getNumericCellValue()).toString();   
    137.             break;   
    138.         case HSSFCell.CELL_TYPE_BOOLEAN:   
    139.             cellValue =String.valueOf(cell.getBooleanCellValue()).trim();   
    140.             break;   
    141.         case HSSFCell.CELL_TYPE_FORMULA:   
    142.             cellValue =cell.getCellFormula();   
    143.             break;   
    144.         default:   
    145.             cellValue = "";   
    146.         }   
    147.         return cellValue;   
    148.     }   
    149.    
    150. //判断某行某列有问题  
    151. private int CheckRowError(HSSFCell cell,List<Object>error_num,int rowNum,int cell_num){  
    152. //判断各个单元格是否为空  
    153. if(cell==null||cell.equals("")||cell.getCellType() ==HSSFCell.CELL_TYPE_BLANK){  
    154. error_num.add("出错啦!请检查第"+(rowNum+1)+"行第"+(cell_num+1)+"列。"+"如果您在该行没有数据,建议您选择删除该行,重试!");  
    155. return -1;  
    156. }  
    157. return 0;  
    158. }  
    159.    
    160. //判断行为空  
    161. private int CheckRowNull(HSSFRow hssfRow){  
    162. int num = 0;  
    163. Iterator<Cell> cellItr =hssfRow.iterator();  
    164. while(cellItr.hasNext()){  
    165.  Cell c =cellItr.next();                          
    166.  if(c.getCellType() ==HSSFCell.CELL_TYPE_BLANK){  
    167.  num++;  
    168.  }  
    169. }  
    170. return num;  
    171. }  
  • 相关阅读:
    awk 使用shell 变量
    设计模式之 外观(门面)模式 Facade
    设计模式之 抽象工厂模式
    python 第一课
    Visual Basic 图片连接地址添加
    smarty 不同模板 缓存时间
    PHP 传参过滤
    Nginx 0.7.x + PHP 5.2.10(FastCGI)搭建支持高并发量的Web服务器
    linux vi 编辑命令
    PHP 命令模式 执行文件 并传递参数
  • 原文地址:https://www.cnblogs.com/telwanggs/p/6650354.html
Copyright © 2020-2023  润新知