ssh项目中导入Excel功能实现

1.导包,导包,导包!!!!!!!重要的是说3遍,不导包就是做梦!!!!!(pingyin4j.jar)


2.几个类型的包就不用多说了,需要说的是在service接口中需要多添加一个保存集合的方法,在接口的实现类中实现这个方法:

	public void saveList(List<BcSubarea> subarea) {
		for (BcSubarea bcSubarea : subarea) {
			subareaDao.save(bcSubarea);    //因为在service接口中有保存单个实体类的方法,这里就直接用了
		}
	}

3.接下来是jsp界面:(千万不要忘了enctype ,千万,前外)

<form action="${cxt}/subarea/importExcel" method="post" enctype="multipart/form-data" target="_parent">
	<input type="file" name="file" />
	<input type="submit" value="导入" />
</form>

4.接下来就是重头戏了,在action中的代码:(只贴了关键部分,每一步都解释清楚了,用的时候可以直接复制粘贴,该一些实体类对象,就行了)

	@Action(value="importExcel",results= {@Result(name="importExcel",location="/WEB-INF/content/subarea/queryAllByPager.jsp")})
	//上传Excel
	public String importExcel() {
	//创建一个集合对象,用来给数据库插入多条数据
	List<BcSubarea> list = new ArrayList<BcSubarea>();
		
	//第一步,创建一个workbook对象,(因为后缀名是.xsl所以用HSSWorkbook创建对象)
	HSSFWorkbook workbook = null;
	try {
		//得到整个excel中的所有数据(因为sheet可能有几页)
		workbook = new HSSFWorkbook(new FileInputStream(file));
		// 拿到excel表中的sheet(这个0表示的是第一页中的数据),如果有好几个sheet的话就用循环,在嵌套一个循环遍历出sheet中的每一行
		HSSFSheet sheetAt = workbook.getSheetAt(0);
		// 循环遍历sheet,拿到表中的每一行
		for (Row row : sheetAt) {
			// 去掉标题行
			if (row.getRowNum() == 0) {	//excel中最上面的一行为标题行
				continue;
			}
			BcSubarea subarea= new BcSubarea();	//创建一个bcRegion对象用来接收从excel中读到的数据
			subarea.setStartnum(row.getCell(1).getStringCellValue());			//开始编号
			subarea.setEndnum(row.getCell(2).getStringCellValue());				//结束编号
			subarea.setPosition(row.getCell(3).getStringCellValue());			//位置信息
                        //创建一个省市区对象(这里创建一个新对象的原因是我Excel表中有当前实体类关联的另一个实体类中的对象)
			BcRegion region = new BcRegion();									//省市区
			//得到excel中当前格的内容,通过 - 分割成 几段 放到string类型的数组中
			String[] str = row.getCell(4).getStringCellValue().split(" - ");    //这个就是把Excel表中的数据切割,并放入数组中(如果不用写个的话可以不写这一段)
			region.setProvince(str[0]);                                         //省
			region.setCity(str[1]);                                             //市
			region.setDistrict(str[2]);                                         //区
			//根据已经得到的三条信息查询当前对象
			region =  bcRegionService.queryOne(region);     //根据上面获得的3个条件查询地区对象
			subarea.setBcRegion(region);										//把根据省市区得到的对象设置给subarea
	            //把每一列得到的对象添加到创建的集合中
	            list.add(subarea);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//进行循环插入
		subareaService.saveList(list);

		return "importExcel";
	}


5.根据id查询对象的时候需要注意:如果在数据库中查询不到当前对象怎么办:

以下是在service实现类中的代码:

	//条件查询
	public BcRegion queryOne(BcRegion regin){
		
		 List<BcRegion> list = bcRegionDao.queryByExample(regin);	//首先根据Excel表中的3条数据查询返回一个list集合
		 if(list.size() == 0) {						//数据库中没有数据,就进行保存
			 bcRegionDao.save(regin);
			 return regin;						//返回这个对象,因为怎么样都要用到Excel表中的对象
		 }else {
			 return list.get(0);
		 }
	}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值