jsp+poi+springMVC实现导入excel数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hexu_blog/article/details/84662094

1 .加入依赖的包,我这里使用的是maven

  <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.9</version>
     </dependency>

2. jsp代码

  

3.js代码

    

    4.开始java代码了

        

    @RequestMapping(value = "/admin/ajaxUpBuildLoadexcel", method = {RequestMethod.GET, RequestMethod.POST })
    public void importBuild(
            HttpServletRequest request,HttpServletResponse response,HttpSession session,
            @RequestParam(value = "managerid", defaultValue = "0") long managerid,
            @RequestParam(value = "file", required = false) MultipartFile file) //名字为表单提交过来的名字,也就是前方input=file文件的名字
                    throws Exception {
        response.setCharacterEncoding("utf-8");// 防止ajax接受到的中文信息乱码
        PrintWriter out = response.getWriter();

        if(file.isEmpty()){
            out.print("文件不存在!");
            out.flush();  
            out.close();
               return;
        }  
        List<TblBuildingInfo> buildDataList = new ArrayList<TblBuildingInfo>();//自定义泛型集合,用用于添加到excel读取的类容,再批量添加到数据库
        TblBuildingInfo buildInfo = null;
        TblManagerInfo manager = null;
        int count = 0;// 楼栋导入数量
        Workbook wookbook = null;

//这里一定要转换一下file类型,不然无法读取流
        CommonsMultipartFile cFile = (CommonsMultipartFile) file;
        DiskFileItem fileItem = (DiskFileItem) cFile.getFileItem();
        InputStream inputStream = null;
        try
        {
            //获取一个绝对地址的流
            inputStream=fileItem.getInputStream();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        try 
        {
            //2003版本的excel,用.xls结尾
            wookbook = new HSSFWorkbook(inputStream);//得到工作簿
            
        } 
        catch (Exception ex) 
        {
            try
            {
                //2007版本的excel,用.xlsx结尾
                wookbook = new XSSFWorkbook(inputStream);//得到工作簿
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        // 得到一个工作表
        Sheet sheet = wookbook.getSheetAt(0);
        // 获得表头
        Row rowHead = sheet.getRow(0);
        // 获得数据的总行数
        int totalRowNum = sheet.getLastRowNum();
        // 获得所有数据
        for (int i = 1; i <= totalRowNum; i++) {
            // 获得第i行对象
            Row row = sheet.getRow(i); 

//这里判断每一行的列数是不是等于3
            if(row.getPhysicalNumberOfCells()!=3)//每一行得到列数
                continue;
            HSSFDataFormatter dataFormatter = new HSSFDataFormatter();//设置读取小数为整数
            // 获得获得第i行第0列的 String类型对象
            Cell cell = row.getCell((short) 0);//第一列
            if(cell.toString().trim().equals("")||cell==null)continue;//判断每一列是否为空
            buildInfo = new TblBuildingInfo();
            buildInfo.setBuildname(cell.toString());

            cell = row.getCell((short) 1);
            buildInfo.setUnitnum(Integer.parseInt(cell.toString()));
            cell = row.getCell((short) 2);
            if(cell.toString().trim().equals("")||cell==null)continue;
            buildInfo.setVid(cell.toString());

//添加到集合
            buildDataList.add(buildInfo);
        }
        if (buildDataList != null && buildDataList.size() > 0) {
            if (buildDataList.size() > 3000) {
                out.print("很抱歉,您本次导入的楼栋数是" + buildDataList.size()+ ",系统目前最大支持导入3000条数据!");
                out.flush();
                out.close();
                inputStream.close();
                return;
            }
            
            manager = (TblManagerInfo) baseService.findById(TblManagerInfo.class, managerid);
            if (manager != null) {
                // 批量插入数据库
                count = houseService.exportBuildData(manager,buildDataList);
            } else {
                out.print("管理员不存在!");
                out.flush();
                out.close();
                inputStream.close();
                return;
            }
        }
        
        buildDataList = null;
        manager = null;
        
        out.print("导入成功!本次共导入楼栋" + count +"栋");
        out.flush();
        out.close();
    }

5.excel模版

   

猜你喜欢

转载自blog.csdn.net/hexu_blog/article/details/84662094
今日推荐