java之poi excle导入(一行代码一行注解)

  • html(写的比较简单没用任何样式哈哈哈):
<input type="file" name="file" id="file" contenteditable="false"/></input> 
<input id="dic_upload_excle" type="button" value="上传">

 

  • js:
 var dic_upload_excle=$("#dic_upload_excle");
    dic_upload_excle.on("click",function(){
        importExp();
    });
    
  //导入文件
    function importExp() {
        var formData = new FormData();
        var name = $("#file").val();
        if(name==null||name==""){
            alert("请选择文件");
            return;
        }

        //这里是把文件取出来存进去
        formData.append("file",$("#file")[0].files[0]);
        formData.append("name",name);
        console.log(name);
        $.ajax({
            url : "#路径",
            type : 'POST',
            async : false,
            data : formData,
            // 告诉jQuery不要去处理发送的数据
            processData : false,
            // 告诉jQuery不要去设置Content-Type请求头
            contentType : false,
            beforeSend:function(){
                console.log("正在进行,请稍候");
            },
            success : function(responseStr) {
                alert(responseStr);
            }
        });
    }
  • java代码:
@RequestMapping("/uploadStudent")
    @ResponseBody
    public void uploadStudent(HttpServletRequest request,HttpServletResponse response ){
        InputStream input=null;

        //创建一个学生集合,用来装excle表格的数据
        List<Student> list=new ArrayList<Student>();
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = Calendar.getInstance();
        try {

            //拿到文件
            MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
            MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
            MultipartFile file = (MultipartFile) multipartRequest.getFile("file");
            //创建输入流对象
            input=file.getInputStream();
            //创建文件代替excle
            HSSFWorkbook wb=new HSSFWorkbook(input);
            //取到第一页
            HSSFSheet sheet=wb.getSheetAt(0);
            //获取总行数
            int rows=sheet.getLastRowNum();
            //获取表头行
            HSSFRow firstRow=sheet.getRow(0);
            //获取总列数
            int cells=firstRow.getPhysicalNumberOfCells();
            //创建一个数组代替一列中所有的值
            String [] str=new String[cells];
            for (int i = 0; i < rows; i++) {
                //创建学生对象,用来装每一行的数据
                Student inObject=new Student();
                //取到某一行,从第二行开始,因为第一行是表头,循环行
                HSSFRow row=sheet.getRow(i+1);
                //判断一行中的所有单元格是否都为空
                if(ExcleUtil.isRowEmpty(row)){
                    //不做操作
                }else{
                    //从第二列开始,因为第一列是编号,循环列
                    for (int j=0;j<row.getLastCellNum();j++) {
                        if(row.getCell(j+1)!=null){
                            //判断是否是数值类型
                            if(row.getCell(j+1).getCellType()==0){

                                //判断excle单元格是否为日期类型
                                if(HSSFDateUtil.isCellDateFormatted(row.getCell(j+1))){

                                    //因为取出来是Date类型所以加上+""转成String
                                    str[j]=row.getCell(j+1).getDateCellValue()+"";
                                }else{
                                    //将单元格数据类型转成String(注意:这里我都是直接转成String,如果有复杂数据建议不要这样)
                                    row.getCell(j+1).setCellType(HSSFCell.CELL_TYPE_STRING);
                                    //接收单元格的值
                                    str[j]=row.getCell(j+1).getStringCellValue();
                                }
                            }else{
                                //将单元格数据类型转成String
                                row.getCell(j+1).setCellType(HSSFCell.CELL_TYPE_STRING);
                                //接收单元格的值
                                str[j]=row.getCell(j+1).getStringCellValue();
                            }
                        //单元格为空时,直接给空字符串
                        }else{
                            str[j]="";
                        }
                    }
                   //将学生对象放入学生集合
                    list.add(inObject);
                }
                
            }
           for(Student item :list){

               //调用service循环添加

               service.add(item);

           }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(input!=null){
                try {

                    //关闭文件流
                    input.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
       
    }

 

以上就是整个流程,有什么问题可以评论哟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值