您的位置:首页 > 编程语言

对Excle的行和列进行检查 单元格类型转换代码 ;

2017-03-02 17:41 232 查看
对Excle的行和列进行检查 转换代码 ;

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 }


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: