本文中的方法只适合Excel2003,要读取Excel2007最好使用poi.jar,据说poi.jar还在更新,jxl.jar已经不更新了,处理Excel文件的读写问题最好还是学习poi.jar ,后续会写随笔记录poi.jar的用法。
  读取Excel文件中的内容可以用jxl.jar、poi.jar包,这里只介绍用jxl.jar包的实现方法。首先要导入jxl.jar包,例子中使用的框架是MyBatis+Spring MVC
    思路:为避免向本地上传病毒文件等安全问题,导入文件功能一般不会允许读到文件在本地的路径,因此要读取本地文件中的内容必须先将文件上传到服务器,然后从服务器的路径中读取。因此导入Excel文件数据的过程为:
     (1)上传Excel文件到服务器。
     (2)用jxl.jar包中的方法读取保存在服务器路径中的Excel文件的数据。
     (3)将读取的数据保存到对象中并插入数据库。
     步骤1:文件上传:
     (1)jsp页面的form表单中添加属性:enctype="multipart/form-data"。
       <form:form id="" modelAttribute="" action="" method="post" enctype="multipart/form-data" class="">
     (2)form表单中有一个file组件 :
      <input type="file" id="" name="" />
       如果希望点击“文件导入 ”按钮就直接弹出选择文件窗口,不想将文件的input显示出来,可以将input设置成隐藏的,当点击按钮时触发function,在触发的function中设置该文件input的click事件。比如:
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
    <head>
          <script type="text/javascript">
            $(document).ready(function() {
                //数据导入
                 $("#import").click(function(){
                         $("#excelFile").click();
                });
            });
          </script>
    </head>
    <body>
       <form:form id="uploadForm" modelAttribute="" action="" method="post" enctype="multipart/form-data" class="">
       <input type="file" id="excelFile" name="" style="display:none"/>  
       <button id="import" class="" type="button"> Excel文件导入 </button>
       </form:form> 
     </body>
</html>
      如果需要对导入文件的格式进行验证,可以写在按钮的onclick事件里:
 
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
    <head>
          <script type="text/javascript">
            $(document).ready(function() {
                 $("#import").click(function(){
                         $("#excelFile").click();
                         checkFile();
                });
            });
          //检查文件类型
          function checkFile(){
                    var array = new Array('xls','xlsx');
                    var filename = $("#uploadfile ").val();
            if(filename == ""){
                  alert("请选择要上传的文件");
                  return false;
             }else {
                    //javaScript的match()方法检索与正则表达式相同格式的字符串,返回一个数组,该数组的第0个元素返回的是匹配文本,其余的元素存放的是与正则表达式的子表达式匹配的文本。获得文件类型除了下面的写法外,还可以用:var extStart=filepath.lastIndexOf(".");fileType = filename.substring(extStart, filename.length);来替代
                    var fileType = filename.match( /^(.*)(\.)(.{1,8})$/)[3];//找到文件的后缀
                    var isExist = false;
                    for(i in array){
                         if(fileType.toLowerCase() == array[i].toLowerCase()){
                                 isExist = true;
                                 return true;
                         }
                    }
                   if(isExist == false ){
                         alert("文件类型不正确");
                         return false;
                    }
                   return true;
             }
          }
          </script>
    </head>
    <body>
       <form:form id="uploadForm " modelAttribute="" action="" method="post" enctype="multipart/form-data" class="">
       <input type="file" id="excelFile" name="" style="display:none"/>  
       <button id="import" class="" type="button"> Excel文件导入 </button>
       </form:form> 
     </body>
</html>
     (3)选择完文件且验证过文件类型后,提交表单跳转到导入文件对应的处理方法
          <head>
          <script type="text/javascript">
            $(document).ready(function() {
                //数据导入
                 $("#import").click(function(){
                         $("#excelFile").click();
                         var t = checkFile();
                         if(t){
                         $("#uploadForm").attr("action","${ctx}/app/test/importExcel");
                         $("#uploadForm").submit();
                       }
                });
            });
          </script>
         </head>
 (4)后台类
     //Excel格式数据导入
    @RequestMapping(value = "importExcel")
    public String importExcel(@RequestParam(value="excelFile", required=false) MultipartFile file, RedirectAttributes redirectAttributes, HttpServletResponse response)
     {
           InputStream fis = null;
           String uploadPath = SystemPath.getSysPath() + "WEB-INF/views/app/upload" + File.separator;
           String fileName = file.getOriginalFilename(); //文件名称
           String path = uploadPath + fileName.substring(0, fileName.lastIndexOf(".")) + DateTimeUtil.get_YYYYMMDDHHMMSS(ne  Date())+fileName.substring(fileName.lastIndexOf("."), fileName.length());//为了在服务器中放的文件不重复,修改文件名,在文件名中加上时间
           File uploadFile = new File(path);
           try {
                 file.transferTo(uploadFile);//将本地文件中的内容上传到服务器文件
                 fis = new FileInputStream(path);
                 Workbook wb = Workbook.getWorkbook(fis);//jxl.jar中读取Excel文件内容的方法
                if(!judgeExcelModel(wb)){//judgeExcelModel为判断Excel文件格式的方法,根据具体情况自行添加
                     FileUtils.deleteFile(path);
                     addMessage(redirectAttributes, "Excel格式错误,请下载平台提供的模板");
                }else{
                     int sheet_size = wb.getNumberOfSheets();//工作栏的数量
                     for(int index=0;index<sheet_size;index++){
                                Sheet sheet = wb.getSheet(index);//工作栏的内容
                                for(int i=1;i<sheet.getRows();i++){
                                     Student stu = new Student();
                                     String age = sheet.getCell(0, i).getContents();
                                     String name = sheet.getCell(1, i).getContents();
                                     String class = sheet.getCell(2, i).getContents();
                                     String school = sheet.getCell(3, i).getContents();
                                     stu .setAge(age );
                                     stu .setName(name);
                                     stu .setClass(class);
                                     stu .setSchool(school);
                                     stu Service.insert(stu );
                                }
                     }
                     addMessage(redirectAttributes, "批量导入数据成功");
            FileUtils.deleteFile(path);//导入成功后将服务器中的文件删掉
                }
           } catch (IllegalStateException e) {
                e.printStackTrace();
           } catch (BiffException e) {
                e.printStackTrace();
           }catch (IOException e) {
                e.printStackTrace();
           }finally{
                if(fis != null){
                     try {
                           fis.close();
                     } catch (IOException e) {
                           e.printStackTrace();
                     }
                }
           }
    }
    到这里,已经完成导入Excel文件数据的功能,在具体应用时,应该还需要对插入数据库的各数据进行验证,将验证通过的记录放在list集合中,等所有记录验证结束后再一起将验证通过的数据插入到数据库。

Excel文件按照指定模板导入数据(用jxl.jar包)的更多相关文章

  1. excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)

    将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...

  2. 图解SSIS监视文件夹并自动导入数据

    原文:图解SSIS监视文件夹并自动导入数据 演示案例:让系统自动监视文件夹,并把文件夹下面的excel文件导入到sql中,之后清空目录.这个过程以往都需要写程序来实现或者定时执行,现在可以用ssis来 ...

  3. Java使用jxl.jar包写Excel文件的最适合列宽问题基本实现

    以前用jxl.jar包,读写过Excel文件.也没有注意最适合列宽的问题,但是jxl.jar没有提供最适合列宽的功能,上次用到写了一下,可以基本实现最适合列宽. 注意,这个只是基本可以实现,基本针对中 ...

  4. excel导出 jxl.jar包

    导入jxl.jar包, 代码如下: package com.gree; import java.io.IOException; import java.io.OutputStream; import ...

  5. 在Maven项目中,指定使用阿里云仓库下载jar包

    Maven项目中,在pom.xml的</project>标签之前加入一下标签,指定使用阿里云仓库下载jar包. <!-- 使用aliyun maven --> <repo ...

  6. 基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能

    思路: 1.首先,页面前端,上传附件,提交给后台,并带一个随机性的参数(可以用时间戳): 2.后端接收附件,做一系列的逻辑处理,无误后,将对应的文件存储在上传的目录下: 3.然后前端,上传附件成功后, ...

  7. PLSQL导入Excel文件预览不到数据行问题

    今天,从Excel导入Oracle一些数据,在导入的过程中,遇到一个问题,Excel里面有好几万条数据,但是通过PLSQL导入向导导入Excel文件之后,在PLSQL里却预览不到数据行,只能看见标题行 ...

  8. 通过Excel文件快速创建页面和数据表

    在设计一个软件系统,构建过程:需求->数据表->系统开发.实际情况是需求(数据)很多来源于已经存在的文件中,客户会要求把这些数据“电子化”,这就给需求分析产生了很大的工作量: 分析这些原始 ...

  9. excel文件使用navicat工具导入mysql的方法

    1.在excel文件的sheet上,第1行下面插入一行,对应DB里面的字段名称,方便后面导入时做字段匹配: 2.使用Navicat ,打开工具,选择表所在的数据库,然后点击数据库名字,右键Tables ...

随机推荐

  1. MySql学习笔记(一) —— 关键字的使用

    1.distinct关键字 作用:检索出有不同值的列,比如一个商品表中存在供应商vend_id,一个供应商会对应很多商品,我们要查找有多少供应商,就可以用到该关键字去重. select distinc ...

  2. 开涛spring3(9.3) - Spring的事务 之 9.3 编程式事务

    9.3  编程式事务 9.3.1  编程式事务概述 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理. Spring框架提供一致的事务抽象,因此对于JDBC还是JTA事务都是 ...

  3. Linux系统下安装Mysql5.7.18教程收集分享

    本人最近服务器新手入门,需要搭建一个在linux虚拟机上的服务器 第一天再装虚拟机,选的linux系统CentOS,一切顺利. 第二天,要给虚拟机装Mysql,但是需要用到命令行进行安装/操作等,我是 ...

  4. 360你吃屎啊你,hao123,12345等等

    请看到这个文章的小伙伴将文章看完,看看我的感受是有多深,谢谢了 现在浏览器已经是人们经常用的东西,相信都有时不时就差度娘的习惯吧 也就是说每个人都有自己喜欢的主页 可电脑有时候就是遭不住,360什么的 ...

  5. 解决shiro和quartz2 版本冲突问题

    修改build.gradle   compile ("org.quartz-scheduler:quartz:2.2.3") compile ("org.apache.s ...

  6. 使用cnpm搭建私有NPM仓库 发布npm包

    关于如何使用cnpm搭建私有的npm仓库看这里→ http://blog.fens.me/nodejs-cnpm-npm/ 我本人还没有机会真正实践操作过,公司的npm仓库是我老大搭建的,我这里仅仅记 ...

  7. #417 Div2 B

    #417 Div2 B 题意 给定一个01矩阵表示一幢楼,左右两侧是楼梯,中间是房间,1代表那个房间开灯,0代表关灯,现在某人从1层左端楼梯开始关掉所有灯,当移动某一层时,必须关掉当前层所有灯才能移动 ...

  8. Blend在WPF开发过程中的作用

    WPF开发时,用VS2012就足够了,因为里面的确有控件拖放编辑和便利的带输入自动完成的xaml编辑器. 但是在需要改变某些控件的样式时,特别是style和template是,看网上搜到的教程,洋洋洒 ...

  9. C语言进制转换的一个小错误

    今天学妹问了一个问题,问题是这样的 有以下程序 #include <stdio.h> void main(){ int  m=0256,n=256; printf("%o %o& ...

  10. Myeclipse8.6注册机代码,不用到处找注册机了

    import java.io.*; public class MyEclipseGen { private static final String LL = "Decompiling thi ...