java中关于Excel表格的的数据导入

注意点:

  1. 必须同步提交form表单
  2. Form表单编码方式 multipart/form-data
  3. 提交方式必须为post
  4. 上传文件对应 input type=”file” 元素要提供name属性

          

这里文件的导入解析我们使用Jquery ocupload

1.用到了新技术首先是导包  ,前端技术是导入js文件 

导入JQuery ocupload

<script type="text/javascript" src="../../js/ocupload/jquery.ocupload-1.1.2.js"></script>

2.给导入按钮绑定upload事件

这里的红色字体标注的是验证表单类型,如果你不验证把他去掉就是直接无条件上传

  $("#button-import").upload({

                  // 默认name为file ,可以不写

                  name: 'file'

                  action : '../../area_batchImport.action',

                  // 在选择文件的时候触发的事件

                  onSelect :function(){

                      // 选中文件后,关闭自动提交

                      this.autoSubmit = false ;

                      // 判定文件格式 ,以.xls 或者 .xlsx 结尾

                      var filename = this.filename();

                      var regex = /^.*\.(xls|xlsx)$/ ;

                      if(regex.test(filename)){

                         // 满足

                         this.submit();

                      }else{

                         //不满足

                         $.messager.alert("警告","只能上传.xls或.xlsx结尾的文件!","warning");

                      }

                  },

                  onComplete : function(response){

                      $.messager.alert("成功","文件上传成功!","info");

                  }

               });

3.因为我们后台是使用的struts2,struts2的拦截器会对上传文件进行增强

4.然后我们在后台进行文件的接受(上传图片一样,只要是文件都有这3个参数)

在Action中进行定义这3个参数就可以接受到文件了,注意之前页面的上传文件绑定的name名字跟这里的name必须一致

(上传图片的话就是图片的那个input按钮的name属性的值)

  private File [页面元素name]:表示获取文件

private String [页面元素name]ContentType:表示获取上传文件的类型

private String [页面元素name]FileName:表示获取上传的文件名

5.获取到文件了我们要将获取的文件进行解析让文件导入到数据库中

这里我们使用poi文件导入

     5.1.进行依赖的注入

<dependency>

           <groupId>org.apache.poi</groupId>

           <artifactId>poi</artifactId>

           <version>${poi.version}</version>

       </dependency>

       <dependency>

           <groupId>org.apache.poi</groupId>

           <artifactId>poi-ooxml</artifactId>

           <version>${poi.version}</version>

       </dependency>

       <dependency>

           <groupId>org.apache.poi</groupId>

           <artifactId>poi-ooxml-schemas</artifactId>

           <version>${poi.version}</version>

       </dependency>

     5.2在刚刚的action中我们进行数据的解析

这些导入需要我们事先知道Excel中的数据类型才可以,Excel中的数据放置的位置必须按照我们下面解析的顺序放

         POI解析Excel 逻辑。

    解析workbook(工作薄)---> sheet(工作表)---> row(行)---> cell(列/单元格)

@Action(value = "area_importArea")

    public String importArea() throws IOException {

       List<Area> areas = new ArrayList<Area>();//创建地区集合,用来存下面解析出的数据

       // 编写解析代码逻辑

       // 基于.xls 格式解析 HSSF

       // 1、 加载Excel文件对象

       HSSFWorkbook hssfWorkbook = new HSSFWorkbook(new FileInputStream(file));

       // 2、 读取一个sheet

       HSSFSheet sheet = hssfWorkbook.getSheetAt(0);//获取第一个sheet对象

       // 3、 读取sheet中每一行,一行数据 对应 一个区域对象

       for (Row row : sheet) {

           // 第一行表头跳过

           if (row.getRowNum() == 0) {

              // 第一行 跳过

              continue;

           }

           // 跳过空值的,要求此行作废

           if (row.getCell(0) == null

                  || StringUtils.isBlank(row.getCell(0).getStringCellValue())) {

              continue;

           }

           Area area = new Area();

           area.setId(row.getCell(0).getStringCellValue());//区域编号

           area.setProvince(row.getCell(1).getStringCellValue());//省份

           area.setCity(row.getCell(2).getStringCellValue());//城市

           area.setDistrict(row.getCell(3).getStringCellValue());//区域

           area.setPostcode(row.getCell(4).getStringCellValue());//邮编

           areas.add(area);

       }

       // 调用业务层

       areaService.saveAreas(areas);

       return NONE;

    }

     5.3有了数据的集合后台dao层直接进行保存即可

猜你喜欢

转载自blog.csdn.net/zhangpeang/article/details/84818843