java excel导入(使用反射)

/**
	 * 移动设备校验文件
	 */
	public String moveCheck() {
		if("application/vnd.ms-excel".equals(filePathContentType) || "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".equals(filePathContentType)){
			String result=vidiconImportService.moveValiconCheck(filePath,new MoveVidicon(),moveVidiconService,"vidicon_no","_getRecordByNo","setVidiconId");
			if(result!=null){
				message=result;
			}else {
				String insertMesg = vidiconImportService.saveMoveValicons();
				if(insertMesg != null){
					message=insertMesg;
				}
			}
		}else{
			message="非法的文件格式,只能上传2003格式的Excel文件!";
		}
		return ConstantUtil.ACTION_COMPLETE;
	}

/**
	 * @Description: 校验导入的文件(移动设备)
	 * @param file 上传的excel
	 * @param entity 实体类对象
	 * @param serviceEntity 用来校验唯一值的service类
	 * @prama checkOnlyKeyMethordName service曾校验的方法名称
	 * @prame  onlyKey 为一列字段名
	 * @return
	 */
	public String moveValiconCheck(File file,Object entity,Object serviceEntity,String onlyKey,String checkOnlyKeyMethordName,String keyMethord){
		String error = null;
		try{
			Class<?> thisRowEntity = entity.getClass();
			List thisList = new ArrayList();
			
			// 类
			Class<?> cls = serviceEntity.getClass();
			//Object obj=cls.newInstance(); 
			//Method mt=cls.getMethod(checkOnlyKeyMethordName, String.class);
			//Object obj=cls.newInstance();
			// 方法
			Method method;

			Workbook rwb = Workbook.getWorkbook(file);
			Sheet rs = rwb.getSheet(0);
			int rows = getRightRows(rs);// 得到所有的行
			int rsCols = rs.getColumns(); //总列数
			// 类
			
			for(int i = 1;i < rows;i++){// 从1开始,不要表头  (循环行)
				Object thisNewEntity = thisRowEntity.newInstance();
				//thisRowEntity.newInstance();
				for(int ii = 0;ii < rsCols;ii++){// 从0开始,不要表头  (循环列)
					if(onlyKey!= null && onlyKey.equals(rs.getCell(ii, 0).getContents())){ //存在唯一主键
						method=cls.getMethod(checkOnlyKeyMethordName,new Class[]{String.class});
						System.out.println(rs.getCell(ii, i).getContents());
						//此处serviceEntity只能是上下文中的bean,否则会找不到mapper
						Object ojj = method.invoke(serviceEntity, rs.getCell(ii, i).getContents());
						if(ojj != null){
							return "存在冲突数据!---行:" + i+"--列:"+ii;
						}else{
							method=thisRowEntity.getMethod(dealColumnName(rs.getCell(ii, 0).getContents()),new Class[]{String.class});
							method.invoke(thisNewEntity, new Object[]{rs.getCell(ii, i).getContents()});
						}
					}else{
						System.out.println(dealColumnName(rs.getCell(ii, 0).getContents()));
						method=thisRowEntity.getMethod(dealColumnName(rs.getCell(ii, 0).getContents()),new Class[]{String.class});
						method.invoke(thisNewEntity, new Object[]{rs.getCell(ii, i).getContents()});
						
					}
				}
				method=thisRowEntity.getMethod(keyMethord,new Class[]{String.class});
				method.invoke(thisNewEntity, new Object[]{UUIDUtil.genStrByTime(false)});
				thisList.add(thisNewEntity);
				//this.entityList = thisList;
				//entityList.
				//entityList.add(entity<?>);
				//entityList.add(e)
			}
			this.entityList = thisList;
		}catch(Exception e){
			e.printStackTrace();
			error = "解析文件出错了,只支持2003格式的xls文件!";
		}
		return error;
	}

/**
     * 批量导入移动设备
	 * 
	 * @param record record
     */
	public String saveMoveValicons() {
		try {
			List<MoveVidicon> moveVidicons = (ArrayList<MoveVidicon>)entityList;
			
			
			vidiconExtendMapper.insertMoveVidicons(moveVidicons);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			return "存在不合法数据";
		}
		
		
		//LogUtil.addLog("movevidicon", "增加监控点信息【"+record.getVidiconName()+"】");
		return null;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值