Java +EasyUI+SpringMvc实现Excle导入导出(上)

前言

 

    先介绍下项目的开发环境,采用java开发语言进行开发,前台UI使用的是EasyUI框架,接下来是SpringMvcEjb结合来开发,整个项目管理采用的是Maven管理,服务器用的是Jboss6.2.0企业版。

 

正文

 

配置

 

    对于Excel上传文件我们首先要引入commons-fileupload.jar包,由于我们的项目采用Maven进行项目管理,所以对于jar包的引入是在pom.xml文件中添加的依赖,添加commons-fileupload.jar的坐标:


<pre name="code" class="html"><dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.1</version>

</dependency>


 
 

 

    由于后台代码的ExcelUtil工具类所在的项目不再当前的web项目中,而在itoo-exam-too项目中,因此我们需要将ExcelUtil工具类所在的itoo-exam-too项目进行引入,也就是在mavenpom.xml文件中添加itoo-exam-too的项目依赖:

<dependency>
	<groupId>com.tgb</groupId>
	<artifactId>itoo-exam-tool</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>



    接下来SpringMvc的配置文件也需要做些配置,这样可以将前台文件进行解析,传到后台:

<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
<bean id="multipartResolver"
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<property name="defaultEncoding" value="UTF-8" />
	<!-- 指定所上传文件的总大小不能超过10485760000B。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
	<property name="maxUploadSize" value="10485760000"></property>
	<property name="maxInMemorySize" value="40960"></property>

</bean>


 

具体实现

 

      Excel的导入我们可以进行分解,包括三个步骤:

      1.上传Excel文件

      2.读取Excle文件中的数据,将Excle数据转化成list集合

      3.list集合存入数据库

 

   首先我们开始看我们前台easyui上传Excle文件的代码,采用的是一个form表单,表单里包含一个easyui的上传文件的控件easyui-filebox

<form id="questionTypesManage"  method="post" enctype="multipart/form-data">
   选择文件: <input id="uploadExcel" name="uploadExcel" class="easyui-filebox" style="width:200px" data-options="prompt:'请选择文件...'">
   
	     <a href="#" class="easyui-linkbutton" style="width:122px" onclick="uploadExcel()" >导入题库</a>                 

</form> 


    前台代码比较简单,我们使用是EasyUIfilebox进行文件上传,这里需要注意的是form表单的enctype属性必须是""multipart/form-data",接下来我们用js代码对Excle的格式进行基本的校验,然后将文件提交到后台Controller

<pre name="code" class="javascript"> //导入excel
	   function uploadExcel(){   
		 //得到上传文件的全路径
		 var fileName= $('#uploadExcel').filebox('getValue');
		 	  //获取题型
		 var id= $('#questionType').combobox('getValue'); 
		 var questionTypes=encodeURI(id);  
		 
		  if(questionTypes !=""){ 
				 //进行基本校验
				 if(fileName==""){   
					$.messager.alert('提示','请选择上传文件!','info'); 
				 }else{
					 //对文件格式进行校验
					 var d1=/\.[^\.]+$/.exec(fileName); 
					 if(d1==".xls"){
						  //获取题型   
						  var id= $('#questionType').combobox('getValue')
						  var questionTypes=encodeURI(id);
						   
						  //获取课程
						  var courseTypeId =$('#courseTypeId').combobox('getValue')
						  var courseType=encodeURI(courseTypeId);
						  
						  //提交表单
						  document.getElementById("questionTypesManage").action="${pageContext.request.contextPath}/leadtoQuestionTypes/leadInExcelQuestionBank?questionType="+questionTypes+"&courseType="+courseType;
						  document.getElementById("questionTypesManage").submit();   
						  $.messager.alert('提示','操作成功!','info'); 		
				    }else{
				        $.messager.alert('提示','请选择xls格式文件!','info'); 
				    	$('#uploadExcel').filebox('setValue',''); 
				    }
				 }  
		  }else{  
	          $.messager.alert('提示','请选择课程题型!','info'); 
		  }

	  }


 
 

          前台代码完毕以后,我们接下来看controller的代码,这里需要注意的是,前台easyuifileboxname标签的名字是作为参数传到后台的,后台以流的形式接收到前台传过来的excle文件,我们使用Excle工具类将Excle转换成list集合,最后将list集合保存到数据库中。我们看下后台的代码实现:

/**
	 * 导入题库Excel
	 * 
	 * @param uploadExcel  上传的excel文件
	 *           
	 * @param request    请求
	 *          
	 * @param resposne 响应
	 *            
	 * @throws UnsupportedEncodingException 编码异常
	 *             
	 */
	@RequestMapping("/leadInExcelQuestionBank")
	public String leadInExcelQuestionBank(
			@RequestParam("uploadExcel") CommonsMultipartFile uploadExcel,
			HttpServletRequest request, HttpServletResponse response)
			throws UnsupportedEncodingException {
		// 获取前台传来的题型和课程
		String questionType = request.getParameter("questionType").trim();
		String courseType = request.getParameter("courseType").trim();
		String questionTypeNameId = new String(
				questionType.getBytes("iso-8859-1"), "utf-8");
		String courseTypeId = new String(courseType.getBytes("iso-8859-1"),
				"utf-8");
		InputStream in;
		boolean flag = false;
		try {
			// 获取前台exce的输入流
			in = uploadExcel.getInputStream();
			
			//获取sheetName名字
			String sheetName = leadToInQuestionTypesManageBean.getSheetName(questionTypeNameId);
			// excel的表头与文字对应,获取excel表头
			LinkedHashMap<String, String> map = leadToInQuestionTypesManageBean.getMapLeadInExcelQuestionBank(questionTypeNameId);
			//获取组合excle表头数组,防止重复用的
			String[] uniqueFields =new String[] { "题干内容", "正确答案" };
			//获取需要导入的具体的表
			Class class1=leadToInQuestionTypesManageBean.getClassName(questionTypeNameId);
			//excel转化成的list集合
			List list = null;
			try {
				//调用excle共用类,转化成list
				list=ExcelUtil.excelToList(in, sheetName, class1, map, uniqueFields);
			} catch (ExcelException e) {
				e.printStackTrace();
			}
			//保存实体集合
			flag= leadToInQuestionTypesManageBean.leadInExcelQuestionBank(questionTypeNameId, courseTypeId, list);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		System.out.println("执行结果:" + flag);    
		return "/LeadToQuestionTypeBank";  

	}


 

   到这里关于Excle导入就已经完成了,关于Excle的导出,和ExcelUtil类的编写,我们下篇文章继续,敬请期待。

你可能感兴趣的:(Java +EasyUI+SpringMvc实现Excle导入导出(上))