1. 程式人生 > >SSM excel文件的導入導出

SSM excel文件的導入導出

add tid for循環 mat icc 插件 進行 col con

  對於excel文件的導入導出,後臺接收讀取和建表封存都是固定死的,所以對於excel導入時,excel文件內容必須匹配後臺相關對象,不然報錯。

  excel文件導出,用<a><a/>標簽即可,通過後臺去完成 ,不可用ajax去寫導出,ajax請求只是個“字符型”的請求,即請求的內容是以文本類型存放的。

文件的下載是以二進制形式進行的,ajax沒法解析後臺返回的文件流,所以無法處理二進制流response輸出來下載文件。

當獲取前臺導入這個命令後,會通過Mybatis獲取mysql數據庫所有相關數據,通過for循環將獲取集合中一個個對象及對象屬性寫入表中,導出。

  對於excel文件的導入則是可以通過form表單和ajax兩種方法導入,前者在controller控制器裏面返回字符串,會直接顯示在頁面上,需要手動重新刷新頁面。

後者……,雖然很想使用,但網上並沒有找到有關純ajax寫入後臺的案例,不過有幾類別人封裝好的ajax插件用於寫入excel文件的,有興趣可以去找找。

文件上傳,控制臺獲取到文件,讀取文件裏面value值,封存到其對象中,通過Mybatis保存數據庫中。(UPDATE good SET g_id = UUID(),mybatis添加對象時uuid為主鍵,只要mysql主鍵為String類型長度足夠容納uuid自動生成長度)

<!-- html -->
<!-- excel文件導出 -->
<p><a href="${pageContext.request.contextPath}/user/exportExcel">導出</a>
<!-- excel文件導入 -->
<form action="${pageContext.request.contextPath}/user/importExcel" method="post" enctype="multipart/form-data"> <input type="file" name="userExcel" /> <input type="submit" value="導入"> </form>
//控制層
//導出excel文檔 @RequestMapping("/exportExcel") @ResponseBody public void exportExcel(HttpServletRequest request,HttpServletResponse response){ try { //獲取數據源 List<User> userList = userService.queryUserAll(); //導出excel response.setHeader("Content-Disposition","attachment;filename="+new String("用戶信息.xls".getBytes(),"ISO-8859-1")); response.setContentType("application/x-excel;charset=UTF-8"); OutputStream outputStream = response.getOutputStream(); //導出 userService.exportExcel(userList,outputStream); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } }
//導入
	@RequestMapping("/importExcel")
	//@ResponseBody
	public String importExcel(MultipartFile userExcel,HttpServletRequest request,HttpSession session){
		if(userExcel == null){
			session.setAttribute("excelName", "未上傳文件,上傳失敗!");
			return "redirect:queryUserAll";
		}
		String userExcelFileName = userExcel.getOriginalFilename();
		if(!userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){
			session.setAttribute("excelName", "文件格式不正確!請使用.xls或.xlsx後綴的文檔,導入失敗!");
			return "redirect:queryUserAll";
		}
		//導入
		try {
			userService.importExcel(userExcel);
		} catch (IOException | InvalidFormatException e) {
			e.printStackTrace();
		}
		session.setAttribute("excelName", "導入成功!");
		return "redirect:queryUserAll";
	}
//service層
//導出 @Override public void exportExcel(List<User> userList, OutputStream outputStream) throws IOException { //1.創建工作簿 HSSFWorkbook hwb =new HSSFWorkbook(); //1.1創建合並單元格 //CellRangeAddress cellRangeAddress =new CellRangeAddress(0,0,0,4); //2.創建工作表 HSSFSheet sheet = hwb.createSheet("用戶信息表"); //2.1添加合並單元格 //sheet.addMergedRegion(cellRangeAddress); //3.1創建第一行及單元格 HSSFRow row1 = sheet.createRow(0); HSSFCell cell1 = row1.createCell(0); cell1.setCellValue("用戶信息"); //3.2創建第二行及單元格 HSSFRow row2 = sheet.createRow(1); String[] row2Cell = {"編號","姓名","性別","年齡","部門名稱"}; for (int i =0 ; i < row2Cell.length ; i++ ){ row2.createCell(i).setCellValue(row2Cell[i]); } //3.3創建第三行及單元格 if(userList!= null && userList.size()>0){ for(int j=0 ; j<userList.size() ;j++){ HSSFRow rowUser = sheet.createRow(j+2); rowUser.createCell(0).setCellValue(userList.get(j).getId()); rowUser.createCell(1).setCellValue(userList.get(j).getName()); rowUser.createCell(2).setCellValue(userList.get(j).getSex()); rowUser.createCell(3).setCellValue(userList.get(j).getAge()); //rowUser.createCell(4).setCellValue(userList.get(j).getId()); } } //5.輸出 hwb.write(outputStream); }

  

//導入
@Override
	public void importExcel(MultipartFile userExcel) throws IOException, InvalidFormatException {
		//獲取輸入流
		InputStream inputStream = userExcel.getInputStream();
		//創建讀取工作簿
		Workbook workbook = WorkbookFactory.create(inputStream);
		//獲取工作表
		Sheet sheet = workbook.getSheetAt(0);
		//獲取總行
		int rows=sheet.getPhysicalNumberOfRows();
		if(rows>2){
			//獲取單元格
			for (int i = 2; i < rows; i++) {
				Row row = sheet.getRow(i);
				User user =new User();
				
				try {
					String id = row.getCell(0).getStringCellValue();
					user.setId(Integer.parseInt(id));
				} catch (IllegalStateException e) {
					int id=(int)row.getCell(0).getNumericCellValue();
					user.setId(id);
				}
				
				String name = row.getCell(1).getStringCellValue();
				user.setName(name);
				
				String sex = row.getCell(2).getStringCellValue();
				user.setSex(sex);
				
				try {
					String age = row.getCell(3).getStringCellValue();
					user.setAge(Integer.parseInt(age));
				} catch (IllegalStateException e) {
					int age=(int)row.getCell(3).getNumericCellValue();
					user.setAge(age);
				}
				//想數據庫中添加新對象
				addUser(user);//方法
			}
			
		}
		
		inputStream.close();
	}

  

  

SSM excel文件的導入導出