java遍历excel 表格

package 工具类;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

/**
 * 导入excel帮助类
 */
public class ExcelUtil {

    /**
     * 导入excel表格 返回表格数据
     * @param file
     * @return 表格数据
     */
    public static ArrayList<ArrayList<Object>> ImportExcel(MultipartFile file){
        ObjectMapper objectMapper =new ObjectMapper();
        String array = "[\"0\",\"1\"]";

        try {

            InputStream inputStream =file.getInputStream();//获取前端传递过来的文件对象,存储在“inputStream”中
            String fileName = file.getOriginalFilename();//获取文件名

            Workbook workbook =null; //用于存储解析后的Excel文件

            //判断文件扩展名为“.xls还是xlsx的Excel文件”,因为不同扩展名的Excel所用到的解析方法不同
            String fileType = fileName.substring(fileName.lastIndexOf("."));
            if(".xls".equals(fileType)){
                workbook= new HSSFWorkbook(inputStream);//HSSFWorkbook专门解析.xls文件
            }else if(".xlsx".equals(fileType)){
                workbook = new XSSFWorkbook(inputStream);//XSSFWorkbook专门解析.xlsx文件
            }

            ArrayList<ArrayList<Object>> list =new ArrayList<>();

            Sheet sheet ; //工作表
            Row row;      //行
            Cell cell;    //单元格

            //循环遍历,获取数据
            for(int i=0;i<workbook.getNumberOfSheets();i++){
                sheet=workbook.getSheetAt(i);//获取sheet
                for(int j=sheet.getFirstRowNum();j<=sheet.getLastRowNum();j++){//从有数据的第行开始遍历
                    row=sheet.getRow(j);
                    if(row!=null&&row.getFirstCellNum()!=j){ //row.getFirstCellNum()!=j的作用是去除首行,即标题行,如果无标题行可将该条件去掉
                        ArrayList tempList =new ArrayList();
                        for(int k=row.getFirstCellNum();k<row.getLastCellNum();k++){//这里需要注意的是getLastCellNum()的返回值为“下标+1”
                            cell =row.getCell(k);
                            tempList.add(cell);
                        }
                        list.add(tempList);
                    }
                }
            }

//            System.out.println("我是读取的字符串:"+nativeStr);
//            System.out.println("我是读取的数组:"+arrayList.toString());
            System.out.println("我是解析的Excel:"+list.toString());

            return list;
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }


}

遍历

@ResponseBody
    @RequestMapping(value = "/importExcel.do",method = {RequestMethod.POST})
    public ActionResult importData(MultipartFile file, String activeId, String deptId, HttpServletRequest request) throws Exception
    {
        //解析表格数据
        ArrayList<ArrayList<Object>> excelList = ExcelUtil.ImportExcel(file);
        if (excelList == null || excelList.isEmpty()){
            return new ActionResult("Excel表格数据为空",false);
        }

        List<ZSzpbGrCpcj> cpcjList = new ArrayList<>();
        for ( ArrayList<Object> obj:excelList){
            ZSzpbGrCpcj grCpcj = new ZSzpbGrCpcj();

            XSSFCell id = (XSSFCell)obj.get(0);
            DataFormatter formatter = new DataFormatter();
            String valueOfCell = formatter.formatCellValue(id);
            grCpcj.setId(valueOfCell);

            XSSFCell userName = (XSSFCell)obj.get(1);
            grCpcj.setUserName( userName.getStringCellValue());

            XSSFCell dw = (XSSFCell)obj.get(2);
            grCpcj.setDw(dw.getStringCellValue());


            XSSFCell dxpgcj = (XSSFCell)obj.get(3);//定性评估
            grCpcj.setDxpgcj(dxpgcj.getNumericCellValue());

            XSSFCell mzcp = (XSSFCell)obj.get(4);//民主测评成绩
            grCpcj.setMzcpcj(mzcp.getNumericCellValue());


            XSSFCell zhcj = (XSSFCell)obj.get(5);//综合成绩
            grCpcj.setZhpjcj(zhcj.getNumericCellValue());


            XSSFCell tjcj = (XSSFCell)obj.get(6);//推荐结果
            grCpcj.setTjjg(tjcj.getStringCellValue());

            cpcjList.add(grCpcj);

        }

        List<ZSzpbGrCpcj> ActiveScoreList = getDao().getCpcjByActiveId(activeId);
        //定义一个list,错误数据集合,最后统一写入excel中,
        List<ZSzpbGrCpcj> errorList = new ArrayList();
        //判断是否存在错误数据的flag
        boolean errorFlag = false;
        boolean tempFlag = false;
        //判断是否重复的map
        HashMap<String,Object> mapTemp = new HashMap<String,Object>();
        //计划评比部门人员集合
        HashMap<String,String> userTemp = new HashMap<String,String>();
        //excel表格解析数据
        Iterator<ZSzpbGrCpcj> iterator = cpcjList.iterator();
        //user 对象数据
        List<CpcjUserVo> userList = getDao().getUserByDeptName(deptId);

        for (ZSzpbGrCpcj bean : ActiveScoreList) {
            mapTemp.put(bean.getUserName()+bean.getDw(),bean);
        }
        for(CpcjUserVo user:userList)
        {
            userTemp.put(user.getUserName()+user.getDeptName(),"1");
        }
        while (iterator.hasNext()) {
            String errorMsg = "";
            ZSzpbGrCpcj next = iterator.next();
            next.setHdId(activeId);
            next.setDw(deptId);
            String nextId = next.getId();
            if(!userTemp.containsKey(next.getUserName()+next.getDw()))
            {
                tempFlag = true;
                errorFlag = true;
                errorMsg += "该部门人员不在此次计划评比中,";
                next.setErrorMsg(errorMsg);
                System.out.println(next.getUserName() + errorMsg);
                errorList.add(next);
                continue;
            }
            if(mapTemp.containsKey(next.getUserName()+next.getDw())){
                ZSzpbGrCpcj zz = (ZSzpbGrCpcj) mapTemp.get(next.getUserName()+next.getDw());
                next.setId(zz.getId());
                next.setUserId(zz.getUserId());
                //数据重复,更新操作
                //update
                Map<String,Object> map = verifyWay(next,errorMsg,tempFlag);
                errorMsg =  map.get("errorMsg").toString();
                tempFlag = (boolean) map.get("tempFlag");
                if(tempFlag)
                {
                    errorFlag = true;
                    tempFlag = false;
                    //errorlist 添加操作
                    next.setId(nextId);
                    System.out.println("update_nextId:"+nextId);
                    next.setErrorMsg(errorMsg);
                    errorList.add(next);
                    errorMsg="";
                    continue;
                }else{
                    //验证通过
                    //save方法存库,当前一条数据
                    System.out.println("update:"+next.toString());
                    getDao().update(next);
                }
            }else{
                mapTemp.put(next.getUserName()+next.getDw(),next);
                //数据不重复,新增操作
                //验证开始
                //判断人员及所在部门是否属于此次评比部门中的人,不是,错误信息记录

                //验证得分是否正常数值,错误的都记录指errorList中
                //验证方法 :民主测评成绩,定性评估成绩,综合评价成绩,推荐结果  验证
                Map<String,Object> map = verifyWay(next,errorMsg,tempFlag);
                errorMsg = (String) map.get("errorMsg");
                tempFlag = (boolean) map.get("tempFlag");
                if(tempFlag)
                {
                    errorFlag = true;
                    tempFlag = false;
                    //errorlist 添加操作
                    next.setErrorMsg(errorMsg);
                    System.out.println("add_nextId::"+nextId);
                    next.setId(nextId);
                    errorList.add(next);
                    errorMsg="";
                    continue;
                }else{
                    //验证通过
                    //save方法存库,当前一条数据
                    System.out.println("save:"+next.toString());
                    next.setId(null);
                    getDao().save(next);
                }
            }
        }

        List<CpcjExcelEntity> excelEntityList = new ArrayList<>();
        for (ZSzpbGrCpcj grCpcj : errorList){
            //excel生成实体
            CpcjExcelEntity excelEntity = new CpcjExcelEntity();
            excelEntity.setId(grCpcj.getId());
            excelEntity.setMzcpcj(grCpcj.getMzcpcj());
            excelEntity.setDw(grCpcj.getDw());
            excelEntity.setErrorMsg(grCpcj.getErrorMsg());
            excelEntity.setDxpgcj(grCpcj.getDxpgcj());
            excelEntity.setZhpjcj(grCpcj.getZhpjcj());
            excelEntity.setTjjg(grCpcj.getTjjg());
            excelEntity.setUserName(grCpcj.getUserName());
            excelEntityList.add(excelEntity);
        }

        String url = request.getSession().getServletContext().getRealPath("/download/szpb/"+IDUtil.randomUUID()+".xlsx");
        Map<String,Object> map = new HashMap<>();
        //将错误errorList数据放入excel的DOM返回
        //返回值,提示及EXCEL,errorFlag有错误时,提示导入成功,但又错误,下载excel。errorFlag无错误时,提示导入成功
        if(errorList!=null && errorList.size()>0){
            //excel对象操作
            String[] headers = {"序号", "用户名称","单位","定性评估成绩","民主测评成绩","综合评估成绩","推荐结果"};
            ImportExcelUtil.export(headers,excelEntityList,url);
            System.out.println("excel表格生成"+errorList.size()+"条数据!");
            String ExcelUrl = url.substring(url.indexOf("download"));
            System.out.println(ExcelUrl);
            map.put("url",ExcelUrl);
            return new ActionResult("加载成功", map);
        }

        map.put("scoer",excelEntityList);//成功导入失败excel数据
        return new ActionResult("加载成功", map);
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值