导入excel表格数据 不用保存表格

    @SuppressWarnings("deprecation")
    @RequestMapping(value = "/importBrandSorts", method = RequestMethod.POST)
    @ResponseBody
    public AjaxJson importBrandSorts(@RequestParam("filename") MultipartFile file,
            HttpServletRequest request,HttpServletResponse response)
    {
        AjaxJson ajaxJson = new AjaxJson();

        String parameter = request.getParameter("contentsName");
        String id = request.getParameter("id");

        String temp = request.getSession().getServletContext().getRealPath(File.separator)
                + "temp"; // 临时目录
        File tempFile = new File(temp);
        if (!tempFile.exists()) {
            tempFile.mkdirs();
        }
        DiskFileUpload fu = new DiskFileUpload();
        fu.setSizeMax(10 * 1024 * 1024); // 设置允许用户上传文件大小,单位:位
        fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:位
        fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
        if (file == null)
        {
            ajaxJson.setCode("0");
            ajaxJson.setMessage("请选择需要导入的表格!");
            return ajaxJson;
        }

        String name = file.getOriginalFilename();// 获取上传文件名,包括路径
        //name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名
        long size = file.getSize();
        if ((name == null || name.equals("")) && size == 0)
        {
            ajaxJson.setCode("0");
            ajaxJson.setMessage("你需要导入的文件不存在数据或获取你要导入的文件名称失败!");
            return ajaxJson;
        }

        try {
            InputStream is = file.getInputStream(); 
            //导入后验证数据是否符合要求
            int count = invItemDbItateService.exlImprot3(is,name,getCurLoginUser(),parameter,id);
            ajaxJson.setMessage("成功导入【"+count+"】条数据!");
            //通过验证字段判断是否导入可用
//          invItemDbItateService.exlImprot2(is,name,getCurLoginUser(),parameter,id);//验证后导入
//          invItemDbItateService.exlImprot(is,name,getCurLoginUser(),parameter,id);
        } catch (IOException e) {
            e.printStackTrace();
            ajaxJson.setCode("0");
            ajaxJson.setMessage("导入信息失败!");
        }

        return ajaxJson;
    }


/**
     * 导入数据信息在同一张表
     * @param is
     * @param name
     * @param user
     * @param parameter
     * @param id
     * @throws IOException
     */
    public int exlImprot3(InputStream is, String name,LoginUser user,String parameter,String id) throws IOException
    {
        //读取excel的信息
        boolean isExcel2003 = true;  
        List<List<String>> dataLst = null;
        try  
        {
            /** 判断文件的类型,是2003还是2007 */  
            if (WDWUtil.isExcel2007(name))  
            {  
                isExcel2003 = false;
            }  
            dataLst = invItemDirlistBoxService.importBrandPeriodSort2(is,isExcel2003);
            is.close();  
        } catch (Exception ex){  
            ex.printStackTrace();  
            throw new IOException("notData");
        } finally {  
            if (is != null)  
            {  
                try {  
                    is.close();  
                }catch (IOException e) {  
                    is = null;  
                    e.printStackTrace();  
                    throw new IOException("notData");
                }  
            }  
        }  
        //去除dataLst重复元素
        List<List<String>> datas = new ArrayList<List<String>>();  //datas是最终要导入的数据集合
        if(dataLst != null && dataLst.size() > 0) {  
            Set<List<String>> idSet = new HashSet<List<String>>(dataLst);  
            datas.addAll(idSet);  
        }
     /////////////////////////////去重复begin//////////////////////////////////   
        //获取已导入的数据
        List<InvItemDirlistBox> iidbList = new ArrayList<>();
        //用于存储之前导入的数据
        List<List<String>> beforedatas = new ArrayList<List<String>>();
        List<String> items = new ArrayList<>();//用于记录物资编码

        if(!StringUtils.isEmpty(id))
        {
            iidbList = invItemDirlistBoxDao.getBySqlKey("findItemnumByDbid", id);
            for (InvItemDirlistBox invidb : iidbList) {
                items.add(invidb.getItemnum());

                List<String> beforeList = new ArrayList<>();

                beforeList.add(invidb.getItemnum());
                beforeList.add(invidb.getDescription());
                beforeList.add(invidb.getModel());
                beforeList.add(invidb.getTechparameters());
                beforeList.add(invidb.getItemPrice().toString());
                beforeList.add(invidb.getCompaniesid());
                beforeList.add(invidb.getBuyerCode());
                beforeList.add(invidb.getCompanyId());
                beforeList.add(invidb.getContent());
                beforeList.add(invidb.getBrand());
                beforeList.add(invidb.getUnit());

                beforedatas.add(beforeList);
            }
        }

        //重复导入时去除已有的数据和未做改变的数据
        datas.removeAll(beforedatas);
        /////////////////////////////去重复end//////////////////////////////////   

        if (CollectionUtils.isNotEmpty(datas)) 
        {
            //对父表先行插入
            InvItemDbItate invItemDbItate = new InvItemDbItate();
            invItemDbItate.setStatus("INVALID");
            invItemDbItate.setContentsName(parameter);

            if(!StringUtils.isEmpty(id))
            {
                invItemDbItate.setId(id);
            }

            invItemDbItateDao.saveOrUpdate(invItemDbItate, user);
            String dbId = invItemDbItate.getId();

            //导入到数据表中
            for(int i=0,n=datas.size();i<n;i++)
            {
                List<String> error = datas.get(i);
                InvItemDirlistBox invItemDirlistBox = new InvItemDirlistBox();
                invItemDirlistBox.setDbId(dbId);

                for (InvItemDirlistBox invidb : iidbList) {
                    String itemnum = invidb.getItemnum();
                    String anObject = error.get(0);
                    if (itemnum.equals(anObject)) {
                        invItemDirlistBox.setId(invidb.getId());
                        invItemDirlistBox.setValidation(null);
                        Map<String, Object> params = new HashMap<>();
                        params.put("id", invidb.getId());
                        params.put("validation", null);
                        invItemDirlistBoxDao.updateBySqlKey("updateByIdChangVali", params);
                    }
                }
                invItemDirlistBox.setItemnum(error.get(0));
                invItemDirlistBox.setDescription(error.get(1)==""?null:error.get(1));
                invItemDirlistBox.setModel(error.get(2)==""?null:error.get(2));
                invItemDirlistBox.setTechparameters(error.get(3)==""?null:error.get(3));
                invItemDirlistBox.setItemPrice(Double.parseDouble(error.get(4)));
                invItemDirlistBox.setCompaniesid(error.get(5));
                invItemDirlistBox.setBuyerCode(error.get(6));
                invItemDirlistBox.setCompanyId(error.get(7));
                invItemDirlistBox.setContent(error.get(8)==""?null:error.get(8));

                invItemDirlistBox.setBrand(error.get(9)==""?null:error.get(9));
                invItemDirlistBox.setUnit(error.get(10)==""?null:error.get(10));
                invItemDirlistBox.setItemnumed(error.get(0));

                invItemDirlistBox.setState("TOMATCH");
                invItemDirlistBox.setValidTime(null);
                invItemDirlistBox.setItemnumrep(null);
                invItemDirlistBox.setReplaceway(null);
//              invItemDirlistBox.setSitecode("0");

                invItemDirlistBoxDao.saveOrUpdate(invItemDirlistBox, user);
            }
        }
        return datas.size();
    }

public List<List<String>> importBrandPeriodSort2(InputStream in, boolean isExcel2003) throws Exception {
        List<List<String>> lists = readBrandPeriodSorXlsAndXlsx(in,isExcel2003);
        return lists;
    }
private List<List<String>> readBrandPeriodSorXlsAndXlsx(InputStream is,boolean isExcel2003) throws IOException {
        /** 根据版本选择创建Workbook的方式 */  
        Workbook wb = null;  
        if (isExcel2003)  
        {  
            wb = new HSSFWorkbook(is);  
        } else {  
            wb = new XSSFWorkbook(is);  
        }  
        List<List<String>> dataLst = new ArrayList<List<String>>();

        Sheet sheet = wb.getSheetAt(0);
        // 循环行Row
        for (int rowNum = 1; rowNum < sheet.getPhysicalNumberOfRows(); rowNum++) {// 获取总行数
            Row row = sheet.getRow(rowNum);  

            List<String> rowLst = new ArrayList<String>();

            for (int i = 0; i < sheet.getRow(0).getPhysicalNumberOfCells(); i++) {// 获取总列数
                Cell cell = row.getCell(i);//获取列
                if (cell != null) {
                    rowLst.add(getValue(cell));
                }
            }
            dataLst.add(rowLst);
        }
        return dataLst;
    }

注:有不理解的及时留言;
有调用查数据库的地方请忽略!!!

猜你喜欢

转载自blog.csdn.net/netsnake_/article/details/79758818