springmvc导入导出

【配置准备】

       因为项目采用的是springmvc和ejb结合,采用maven仓库管理项目,前台使用easy-ui框架。①做导入导出就要引入相应的excel的jar包,在三层的pom.xml文件中添加依赖:

[html]  view plain  copy
  1.     <!-- 下边是导入导入的Jar -->  
  2. <dependency>  
  3.     <groupId>com.tgb</groupId>  
  4.     <artifactId>itoo-excelV2.0-api</artifactId>  
  5.     <version>${project.version}</version>  
  6.     <scope>provided</scope>  
  7. </dependency>  
  8. <dependency>  
  9.     <groupId>com.tgb</groupId>  
  10.     <artifactId>itoo-excelV2.0-tool</artifactId>  
  11.     <version>${project.version}</version>  
  12. </dependency>  

②在springmvc.xml文件中的配置:

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

【导入具体实现】

前台jsp:

[java]  view plain  copy
  1. <div id="studentImport" class="easyui-window" title="批量导入学生"  
  2.     data-options="modal:true,closed:true,"  
  3.     style="width: 650px; height: 200px; padding: 10px;">  
  4.     <form id="Manage" method="post" enctype="multipart/form-data"  
  5.         action="" novalidate>  
  6.         <br> <a  
  7.             href="${pageContext.request.contextPath}/student/leadToExcelTemplet"  
  8.             class="easyui-linkbutton" style="width: 120px">点击下载模板</a> <br>  
  9.         <br> <br> <input id="uploadExcel" name="uploadExcel"  
  10.             class="easyui-filebox" style="width: 70%"  
  11.             data-options="prompt:'选择文件...'"> <a href="#"  
  12.             class="easyui-linkbutton" style="width: 10%"  
  13.             οnclick="uploadExcel()">导入学生</a>  
  14.     </form>  
  15. </div>  

前台JS:

[html]  view plain  copy
  1. //导入excel  
  2.     function uploadExcel() {  
  3.         //得到上传文件的全路径  
  4.         var fileName = $('#uploadExcel').filebox('getValue')  
  5.         //进行基本校验  
  6.         if (fileName == "") {  
  7.             $.messager.alert("提示",  
  8.                     "请选择上传文件!", "info");  
  9.         } else {  
  10.             //对文件格式进行校验  
  11.             var d1 = /\.[^\.]+$/.exec(fileName);  
  12.             if (d1 == ".xls" || d1==".xlsx") {  
  13.                 $('#Manage')  
  14.                         .form(  
  15.                                 'submit',  
  16.                                 {  
  17.                                     url : "${pageContext.request.contextPath}/student/importStudent",  
  18.                                     onSubmit : function() {  
  19.                                         return $(this).form('validate');  
  20.                                     },  
  21.                                     success : function(result) {  
  22.                                         var result = eval('(' + result+ ')');  
  23.                                         if (result == "error") {  
  24.                                             $.messager.alert("警告", "导入失败!","error");  
  25.                                             $('#studentImport').dialog('close');   
  26.                                             $('#dg').datagrid('reload');   
  27.                                         } else {  
  28.                                             $.messager.alert("提示", "导入成功!","info");  
  29.                                             $('#studentImport').dialog('close');   
  30.                                             $('#dg').datagrid('reload');   
  31.                                         }  
  32.                                     }  
  33.                                 });  
  34.   
  35.             } else {  
  36.                 $.messager.alert("提示",  
  37.                         "请选择xls格式文件!", "info");  
  38.                 $('#uploadExcel').filebox('setValue', '');  
  39.             }  
  40.         }  
  41.     }  

controller--导出模板:

[java]  view plain  copy
  1. @RequestMapping("/student/leadToExcelTemplet")  
  2.     public void leadToExcel(HttpServletRequest request,  
  3.             HttpServletResponse response) {  
  4.   
  5.         excelUtil = new ExcelUtil();  
  6.         try {  
  7.             // excel表格的表头,map  
  8.             LinkedHashMap<String, String> fieldMap = new LinkedHashMap<String, String>();  
  9.             fieldMap.put("code""学号");  
  10.             fieldMap.put("name""姓名");  
  11.             fieldMap.put("sex""性别");  
  12.             fieldMap.put("classes.className""所属班级");  
  13.             fieldMap.put("entranceDate""入学日期");  
  14.             fieldMap.put("identityCardID""身份证号");  
  15.             fieldMap.put("nativePlaceNativePlace""籍贯");  
  16.             fieldMap.put("nation""民族");  
  17.             fieldMap.put("politicalStatus""政治面貌");  
  18.             fieldMap.put("accountAddress""户口所在地");  
  19.             fieldMap.put("originalPlace""生源地");  
  20.             fieldMap.put("graduatedSchool""毕业学校");  
  21.             fieldMap.put("email""电子邮箱");  
  22.             fieldMap.put("telNum""手机");  
  23.   
  24.             String sheetName = "学生";  
  25.             // 导出模板  
  26.             excelUtil.leadToExcel(fieldMap, sheetName, response);  
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.     }  

controller--导入:

[java]  view plain  copy
  1. @RequestMapping(value = "/student/importStudent", method = RequestMethod.POST)  
  2.     public void importStudent(HttpServletResponse response,  
  3.             HttpServletRequest request) throws Exception {  
  4.         // 创建一个通用的多部分解析器  
  5.         CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(  
  6.                 request.getSession().getServletContext());  
  7.         InputStream inExcelFile = null;  
  8.         // 判断 request 是否有文件上传,即多部分请求importDailyResult  
  9.         if (multipartResolver.isMultipart(request)) {  
  10.             // 转换成多部分request  
  11.             MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;  
  12.   
  13.             // 取得request中的所有文件名  
  14.             Iterator<String> iter = multiRequest.getFileNames();  
  15.             while (iter.hasNext()) {  
  16.                 // 记录上传过程起始时的时间,用来计算上传时间  
  17.                 int pre = (int) System.currentTimeMillis();  
  18.                 // 取得上传文件  
  19.                 MultipartFile file = multiRequest.getFile(iter.next());  
  20.                 try {  
  21.                     inExcelFile = file.getInputStream();  
  22.                 } catch (IOException e) {  
  23.                     e.printStackTrace();  
  24.                 }  
  25.   
  26.             }  
  27.   
  28.         }  
  29.   
  30.         // 创建一个list 用来存储读取的内容  
  31.         List list = new ArrayList();  
  32.         Workbook rwb = null;  
  33.         Cell cell = null;  
  34.   
  35.         String result = "error";  
  36.   
  37.         // 获取Excel文件对象  
  38.         try {  
  39.             rwb = Workbook.getWorkbook(inExcelFile);  
  40.         } catch (BiffException e) {  
  41.             e.printStackTrace();  
  42.         } catch (IOException e) {  
  43.             e.printStackTrace();  
  44.         }  
  45.   
  46.         // 获取文件的指定工作表 默认的第一个  
  47.         Sheet sheet = rwb.getSheet(0);  
  48.   
  49.         // 行数(表头的目录不需要,从1开始)  
  50.         for (int i = 0; i < sheet.getRows(); i++) {  
  51.   
  52.             // 创建一个数组 用来存储每一列的值  
  53.             String[] str = new String[sheet.getColumns()];  
  54.   
  55.             // 列数  
  56.             for (int j = 0; j < sheet.getColumns(); j++) {  
  57.   
  58.                 // 获取第i行,第j列的值  
  59.                 cell = sheet.getCell(j, i);  
  60.                 str[j] = cell.getContents();  
  61.   
  62.             }  
  63.             // 把刚获取的列存入list  
  64.             list.add(str);  
  65.         }  
  66.         List<Student> studentList = new ArrayList<Student>();  
  67.         if (list.size() > 0) {  
  68.             for (int i = 1; i < list.size(); i++) {  
  69.                 Student student = new Student();  
  70.                 Object[] object = (Object[]) list.get(i);  
  71.                 String code = object[0].toString();// 学号  
  72.                 String name = object[1].toString();// 姓名  
  73.                 String sex = object[2].toString();// 性别  
  74.                 String className = object[3].toString();// 班级  
  75.   
  76.                 String classesId = null;  
  77.   
  78.                 // 1.判断学生表中是否存在,根据学生code查询  
  79.                 String studentCodeResult = "error";  
  80.                 studentCodeResult = studentBean.queryByCode(code, dataBaseName);  
  81.                 if (studentCodeResult == "error") {  
  82.                     // 2.根据班级名称查 询班级id,如果不存在,需要打印日志,日志表明第几条数据,哪个字段有问题。  
  83.                     List<Classes> classesList = studentBean  
  84.                             .queryClassesByClassName(className, dataBaseName);  
  85.                     if (classesList != null && classesList.size() > 0) {  
  86.                         classesId = classesList.get(0).getId();  
  87.                     } else {  
  88.                         logger.info("第" + (i + 1) + "行的班级名称不规范");  
  89.                     }  
  90.   
  91.                     // 将学生信息添加进studentList中--start  
  92.                     if (studentCodeResult == "error" && classesId != null) {  
  93.                         String id = CreateUUID22.getUUID22();  
  94.                         student.setId(id);  
  95.                         student.setCode(code);  
  96.                         student.setName(name);  
  97.                         student.setSex(sex);  
  98.                         student.setClassesId(classesId);  
  99.                         student.setDataBaseName(dataBaseName);  
  100.                         studentList.add(student);  
  101.                     }  
  102.                     // 将学生信息添加进studentList中--end  
  103.                 }  
  104.             }  
  105.             // 将学生信息导入到数据库-start  
  106.             if (studentList.size() > 0) {  
  107.                 boolean flag = studentBean.saveEntitys(studentList);  
  108.                 if (flag == true) {  
  109.                     result = "success";  
  110.                 }  
  111.             }  
  112.             // 将学生信息导入到数据库-end  
  113.         }  
  114.         jacksonJsonUntil.beanToJson(response, result);  
  115.     }  

【导出具体实现】

前台JS:

[java]  view plain  copy
  1. //导出Excel  
  2. function exportExcel() {  
  3.     document.getElementById("exportExcel").href = "${pageContext.request.contextPath}/student/exportStudent";  
  4. }  

controller:

[java]  view plain  copy
  1. @RequestMapping("/student/exportStudent")  
  2. public void exportStudent(HttpServletRequest request,  
  3.         HttpServletResponse response) {  
  4.     String jobTitleName = null;  
  5.     // 1.获取要导出的教师集合(可以在页面选择也可以使所有教师,暂定++为所有教师)  
  6.     List<Student> studentList = studentBean  
  7.             .queryStudentAll(dataBaseName);  
  8.     // 2.创建Excel表头  
  9.     excelUtil = new ExcelUtil();  
  10.     LinkedHashMap<String, String> fieldMap = new LinkedHashMap<String, String>();  
  11.     fieldMap.put("code""学号");  
  12.     fieldMap.put("name""姓名");  
  13.     fieldMap.put("sex""性别");  
  14.   
  15.   
  16.     String sheetName = "学生";  
  17.     try {  
  18.         // 导出模板  
  19.         ExcelUtil.listToExcel(studentList, fieldMap, sheetName, response);  
  20.         System.out.println("导出成功");  
  21.     } catch (Exception e) {  
  22.         e.printStackTrace();  
  23.     }  
  24. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值