poi將excel轉換成list集合,excel導入

前言:excel導入也是一個常見的問題了,原理還是比較簡單的,看過很多種用法。今天在項目中需要此功能,在做的時候也遇到一些坑,睡前總結下來,大家一起學習。

正文:廢話不說。

項目中的思路是:首先利用poi插件將excel模板的內容轉換成list集合。然後再利用list集合,完成持久化(批量插入)。

一,jsp頁面代碼:

<div class="footerb" style="line-height: 53px;">
      導入隊員信息<input type="file" id="filePath" name="filePath" style="width: 140px;"/>
		  <input type="button" value="導入" <span style="color:#FF0000;">onclick="preview()"</span> />
</div>
選擇文件,點擊“導入”按鈕,觸發 onclick="preview()" 檢驗文件格式是否正確。

相應的js代碼如下:

<pre name="code" class="javascript">//驗證
function preview() {  
	var filePath = $("#filePath").val();
	if(filePath != ""){
		$.ajax({
		       cache: false,
		       type: "POST",
		       url:"${pageContext.request.contextPath}/ec/emergencyTeam/isExcel",
		       data:{filePath:filePath},
		       async: false,
		       error: function(request){
		       		alert("訪問後臺失敗!");             
		       },  
		       success: function(data) {
		    	  if(data == "true"){
		    		  importExcel(filePath);
		    	  }else{
		    		  alert("導入的文件格式不是xlsx或者xls!");      
		    	  }
		       }
		  }); 
	}else{
		alert("請選擇文件");
	}
}
//驗證通過,將excel提交
function importExcel(filePath) {
	var name =  $("#name").val();
	$.ajax({
	       cache: false,
	       type: "POST",
	       url:"${pageContext.request.contextPath}/ec/emergencyTeam/changeExcel",
	       data:{filePath:filePath,name:name},
	       async: false,
	       error: function(request){
	       		alert("訪問後臺失敗!");             
	       },  
	       success: function(data) {
	    	 if(data == "ok"){
	    		 alert("導入成功");
	    		 window.top.frames['contentframe'].listForm.submit();
	    	 }
	       }
	  }); 
}


前臺採用異步驗證的方式。

二,接下來看一下後臺代碼:

/**
	 * 判斷是否是excel表格
	 * @param request
	 * @param response
	 */
	@RequestMapping("/isExcel")
	public  void isExcel(HttpServletRequest request,HttpServletResponse response){
		boolean isExcel = true;
		String filePath = request.getParameter("filePath");
		String fileType = filePath.substring(filePath.lastIndexOf(".")+1);
		if(!"xlsx".equals(fileType) && !"xls".equals(fileType)){
			isExcel = false;
		}
		MsgJsonUtil.outputText(response,String.valueOf(isExcel));
	}
	
	/**
	 * 將excel轉換成list<map>
	 * @throws ParseException 
	 */
	@RequestMapping("/changeExcel")
	public  void exportListFromExcel(HttpServletRequest request,HttpServletResponse response) throws ParseException{
		
		EmergencyTeam emergencyTeam = new EmergencyTeam();//創建一個應急隊對象
		String emergencyTeamName = request.getParameter("name");//獲取應急隊名稱
		emergencyTeam.setName(emergencyTeamName);
		String createUser=(String)request.getSession().getAttribute(LoginAttribute.SESSION_LOGIN_NAME);//獲取操作人
		Date createTime=new Date();
		emergencyTeam.setCreateUser(createUser);
		emergencyTeam.setCreateTime(createTime);
		emergencyTeam.setLocation("520123");//設置所屬地區,默認花溪
		long emergencyTeam_id=EmergencyTeamService.insertEmergencyTeam(emergencyTeam);//添加應急隊信息,並且獲取主鍵
		emergencyTeam_id = emergencyTeam.getId();//獲取新插入的應急隊id
		
		List<Object[]> list = new ArrayList<Object[]>();
		List<HashMap<String,Object>> lstMap=new ArrayList<HashMap<String,Object>>();
		
		String filePath = request.getParameter("filePath");
		//HashMap<String,Object> plotNum=new HashMap<String, Object>();
		System.out.println("filePath:"+filePath);
		
		try {
			list = ExcelHelper.exportListFromExcel(new File("C:\\Users\\Administrator\\Desktop\\"+filePath));
			
			List<TeamUser> teamUsersList = new ArrayList<TeamUser>();
			
			lstMap=(List<HashMap<String,Object>>)list.get(0)[0];
			TeamUser teamUser = new TeamUser();
			for(HashMap<String,Object> m:lstMap){
				if(!m.isEmpty()){
					teamUser = mapToTotalNum(m);//將excel數據行,轉換成teamUser對象
					teamUser.setEmergency_team(emergencyTeam_id);//設置應急隊id
					teamUsersList.add(teamUser);//添加到集合
				}
			}
			for (TeamUser teamUser2 : teamUsersList) {
				System.out.println(teamUser2.getAttchId());
				System.out.println(teamUser2.getEmergency_team());
				System.out.println(teamUser2.getUname());
			}
			EmergencyTeamService.addTeamUser(teamUsersList);//添加應急隊員信息
			
			MsgJsonUtil.outputText(response,"ok");
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

	/**
	 * 將一列數據轉換成TeamUser對象
	 * @param map
	 * @return TeamUser 對象
	 */
	private TeamUser mapToObject(HashMap<String, Object> map) {
		TeamUser teamUser = new TeamUser();
		try {
			BeanUtils.populate(teamUser, map);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		return teamUser;
	}

上面主要要三個方法:

 1.@RequestMapping("/isExcel") 根據文件名,判斷是否是excel文件。
 2.@RequestMapping("/changeExcel") 將Excel轉換成list集合。
 3.mapToObject() 將map集合數據轉換成我們所需的對象數據。

主要說一下第二個方法:@RequestMapping("/changeExcel"):

       該方法,主要完成的操作就是將excel轉換成map集合,再講map集合轉換成對象數據,然後將對象數據添加到list對象集合中。最後用集合數據進行持久化操作。方法的前十行,是我個人業務需求,與excel導入功能無關,可以從第十一行開始看起。

這裏別的不再詳細說明了,不明白可以給我留言。我每天都會登錄csdn。大家相互學習。


三,excel模板設計技巧:

大家注意第三行:這裏是數據的屬性字段,一定要一一對應,不然到時候解析map集合時會出錯的。另外這一行一般不讓用戶看到,只要我們知道就可以,設計好以後可以隱藏起來。

如果誰需要詳細代碼,可以給我留言。

晚安!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章