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);//获取sheetfor(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();//判断是否存在错误数据的flagboolean errorFlag = false;boolean tempFlag = false;//判断是否重复的mapHashMap<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());//数据重复,更新操作//updateMap<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);}

java遍历excel 表格相关推荐

  1. java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...

    非异步方法 /** * 使用Java导出Excel表格并由浏览器直接下载--基于POI框架 * * @param response * @return * @throws IllegalAccessE ...

  2. JAVA读取Excel表格,建数据库建表,并生成java实体实例

    转自:https://blog.csdn.net/wuyongde_0922/article/details/43233413 JAVA读取Excel表格,建数据库建表,并生成java实体实例,这一篇 ...

  3. Java导出Excel表格出现文件损坏异常解决方案

    Java导出Excel表格出现文件损坏异常解决方案 问题出现 问题出现 本人遇到这个问题,由于是第一次见,感觉无从下手.但是导出功能很常见,做的也很多,只有这个出现了文件损坏,那很可能是代码写的有问题 ...

  4. java访问excel表格_Java读取excel表格(示例代码)

    Java读取excel表格 一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建, ...

  5. Java 操作excel表格 - JXL(Java excel api)

    Java 操作excel表格 Java 操作 Excel 最常用的就是JXL(Java excel api)和POI,用起来挺简单的,不过相应的其功能也并非很强大,够用就行! 首先,下载jxl.jar ...

  6. Java对Excel表格的操作

    Java对Excel表格的操作 目前软件开发多采用B/S架构.正B/S架构可以给软件的开发部署带来很大的便利,但是与此同时这种架构也带来了一些问题,例如Web报表的处理等,在B/S架构下,客户端的开发 ...

  7. Java实现Excel表格数据的导入(兼容xls与xlsx)

    Java实现Excel表格数据的导入(兼容xls与xlsx) 目录 依赖 代码 注意点 目录 依赖 <!-- 添加POI的依赖用于Excel的操作 --><dependency> ...

  8. python3遍历电子表格_用openpyxl遍历excel表格

    Python的openpyxl模块,提供了对excel表格的读写操作接口.本文介绍使用openpyxl来遍历excel表格. openpyxl支持Excel 2010 xlsx/xlsm/xltx/x ...

  9. java读写excel表格数据

    java读写excel表格数据 java读写excel表格数据 excel类 package excel;import java.io.File; import jxl.Cell; import jx ...

最新文章

  1. 解决nginx 502 bad gateway--团队的力量
  2. 二维码检测哪家强?五大开源库测评比较
  3. Linux下锁用户与解锁问题
  4. Windows安装Zookeeper和Dubbo(单机版本)
  5. [转载] 杜拉拉升职记——33 360度评估
  6. python 面向对象_Python新手入门【面向对象】
  7. 网站推广——网站推广专员在优化网站中都有哪些技巧呢?
  8. 使用七牛图片遇到的图片方向翻转问题
  9. oracle test 卡死,oracle11g plsql调试存储过程卡死的处理技巧
  10. 关于MYSQL ERROR1045 报错的解决办法
  11. jQuery特效:动画实现闪烁效果
  12. [附源码]Java计算机毕业设计SSM大众点评管理系统
  13. 恒德室内智能照明控制系统电路设计
  14. OCR识别技术之—车牌识别
  15. 精选目标检测3——yolo1、yolo2、yolo3和SSD的网络结构汇总对比
  16. c语言求100以内被7整除的最大自然数,编程,求100以内被7整除的最大自然数
  17. 科软计算机录取人数,科软是如何用5年时间从招生靠调剂到406名400+大神的?
  18. IDEA中创建编写JSP
  19. 迅雷数据平台建设和应用案例
  20. 剪辑视频调整视频播放倍速,改变视频时长

热门文章

  1. Python实现文件夹复制操作
  2. Oracle DBlink创建访问远程数据库
  3. vue读取json文件
  4. Linux下Rsync+sersync实现数据实时同步
  5. 相干信号与非相干信号
  6. 潜入浅出--通信中的频带利用率,以MASK.MPSK作为例子
  7. 软件开发生命周期有几个阶段?
  8. 二叉树的创建——递归与非递归
  9. 判断三条边是否构成三角形
  10. 千兆以太网测试仪什么牌子好