java导入excel

1.jsp传入excel文件,控制器接收文件

@RequestMapping("/AuploadStuTem.action")
	@Transactional
	public String AuploadStuTem(@RequestParam("files") MultipartFile file,Integer cou_id,HttpServletRequest request,HttpServletResponse response,Model model) {
		courseService.AuploadStuTem(file,cou_id,request, response);
		model.addAttribute("cou_id", cou_id);
		return "/admin/lookupcourse";
	}

2.调用Service读取excel中的数据,将数据保存到数据库中

	@Override
	@Transactional
	public String AuploadStuTem(MultipartFile file, Integer cou_id, HttpServletRequest request,
			HttpServletResponse response) {
		String result="";
		if (file.isEmpty()) {
			System.out.println("文件读取失败");
		}
		// 获取excel的物理名称
		// System.out.println(file.getOriginalFilename());
		InputStream in = null;
		try {
			// 获取一个输入流
			in = file.getInputStream();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//里面的集合存储是一行数据,外面的集合是所有的行
		List<List<Object>> listob = null;
		try {
			listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename());
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 声明int类型的变量size用于进行判断传入的excl真实的版本
		int size = 0;
		// 该处可调用service相应方法进行数据保存到数据库中,现只对数据输出
		String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
		// 如果以.xls结尾且真正的由2003版本之前的excel写的
		if (".xls".equals(fileType)) {
			size = listob.size(); // 2003-
			// 如果以.xlsx结尾且真正的由2007版本之后的excel写的
			// 经过测试2007版本以后的excel用util方法会在集合里多产生两个实体 所以这里在循环时次数减去2
			// 如果是2007以后的版本只把后缀改了会在excel里报版本异常
		} else if (".xlsx".equals(fileType)) {
			size = listob.size() - 2; // 2007+
		}
		//查询出本门课程的实验指标的数量
		List<TeacherExperimental> listteaexp=courseDao.queryTeacherExperimental(cou_id);
		// 循环出表格中的行数,一行对应一个对象
		for (int i = 1; i < size; i++) {
			List<Object> lo = listob.get(i);
			StudentCourse studentCourse = new StudentCourse();
			Integer stu_id = null;
			// 根据学生的学号查询出学生的id
			stu_id = courseDao.selectBystuno(String.valueOf(lo.get(0)));
			// 将该人员信息赋值给一个对象
			studentCourse.setStu_id(stu_id);
			Integer score = 0;
			for(int j=0;j<listteaexp.size();j++) {
				score+=Integer.parseInt(String.valueOf(lo.get(4+j)));
			}
			//studentCourse.setStu_score(Integer.parseInt(String.valueOf(lo.get(4))));score
			studentCourse.setStu_score(score);
			studentCourse.setTea_remark(String.valueOf(lo.get(4+listteaexp.size())));
			studentCourse.setCou_id(cou_id);
			
			for(int k = 0;k<listteaexp.size();k++) {
				if(Integer.parseInt(String.valueOf(lo.get(4+k)))>listteaexp.get(k).getTe_exp_score()) {
					result = "评分分数大于最高分数,请参考创建课程时为每项实验指标设置的分数重新评分。";
					return result;
				}else {
					//判断该学生之前是否被导入过成绩,如果是则更新表数据,如果没有则插入数据
					StudentExperimental  se = courseDao.queryStudentExperiment(cou_id,stu_id,listteaexp.get(k).getExp_id());
					if(se==null) {
						courseDao.insertStuExpByExcel(cou_id,stu_id,listteaexp.get(k).getExp_id(),Integer.parseInt(String.valueOf(lo.get(4+k))));
					}else {
						courseDao.updateStuExp(cou_id, stu_id,listteaexp.get(k).getExp_id(),Integer.parseInt(String.valueOf(lo.get(4+k))));
					}
						
				}
					
			}
			courseDao.updateStuCouByStuId(studentCourse);
		}
		result = "文件导入成功!";
		return result;
	}

3.工具类代码

public  List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{  
        List<List<Object>> list = null;  
          
        //创建Excel工作薄  
        Workbook work = this.getWorkbook(in,fileName);  
        if(null == work){  
            throw new Exception("创建Excel工作薄为空!");  
        }  
        Sheet sheet = null;  //页数
        Row row = null;  //行数
        Cell cell = null;  //列数
        list = new ArrayList<List<Object>>();  
        //遍历Excel中所有的sheet  
        for (int i = 0; i < work.getNumberOfSheets(); i++) {  
            sheet = work.getSheetAt(i);  
            if(sheet==null){
            	continue;
            }  
           //遍历当前sheet中的所有行  
           for (int j =3; j <= sheet.getLastRowNum(); j++) {  
                row = sheet.getRow(j);  
               System.out.println();
                if(row==null||row.getFirstCellNum()==j){
                	continue;
                	}  
                //遍历所有的列  
                List<Object> li = new ArrayList<Object>();  
                for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {  
                    cell = row.getCell(y);  
                    li.add(this.getValue(cell));  
                }  
                list.add(li);  
            }  
        }  
        return list;  
    }

另外我卖鞋,A锥、椰子、麦昆、古驰、匡威、彪马、UGG、CK、巴黎世家等等,啥都有,物美价廉,有想法加微信哦:AJ666cmy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值