public Map<String, Object> readExcel(String filePath) throws Exception, DataAccessException { // 判断上传的excel文件是否为空 String flagEmpty = "flagFalse"; Map<String, Object> uploadMap = new HashMap<String, Object>(); // 此集合存放从excel文件中读取的上传信息(不包括为空的行) List<IRmaInfoVO> itemList = new ArrayList<IRmaInfoVO>(); FileInputStream fis = null; POIFSFileSystem fs; HSSFWorkbook wb; HSSFSheet sheet; HSSFRow row; HSSFCell cell; /*--------------------- 读取excel文件的内容开始 --------------------*/ try { // 判断上传文件参数是否为空或没有意义 if (filePath != null && !filePath.equals("")) { fis = new FileInputStream(filePath); fs = new POIFSFileSystem(fis); wb = new HSSFWorkbook(fs); sheet = wb.getSheetAt(0); // 索引为0 int firstNum = sheet.getFirstRowNum(); // 取得实际的行数(包含清掉数据的空行) int lastNum = sheet.getLastRowNum(); //System.out.println("lastNum:"+lastNum); // 用于存放一行的数据(包括标题行) IRmaInfoVO rmaInfovo = null; IRmaRecvDetailVO rmaRecvDetailvo = null; // 用于存放单元格的内容 String cellValue = ""; // 存放转换后的数量 int qty = 0; if (lastNum > 200) { uploadMap.put("flagEmpty", "overflow"); return uploadMap; } else { // 用于存放标题内容 // Map<Object, String> dbCols = new HashMap<Object, String>(); for (int i = firstNum; i <= lastNum; i++) {// 遍历sheet中的行数 row = sheet.getRow(i); if (i == 1 && row == null) { flagEmpty = "flagTrue"; break; } else if (i > 1 && row == null) { continue; } else if (row != null) { int firstCol = row.getFirstCellNum(); int lastCol = row.getLastCellNum(); boolean flagNotEmptyRow = true; if (i > 0 && flagNotEmptyRow) { rmaInfovo = new RmaInfoVO(); rmaRecvDetailvo = new RmaRecvDetailVO(); } for (short j = (short) firstCol; j < lastCol; j++) {// 遍历每一行的列 cell = row.getCell(j); if(cell == null){ cellValue = ""; }else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && HSSFDateUtil.isCellDateFormatted(cell)){ cellValue = DateUtil.format(cell.getDateCellValue()); }else { cellValue = this.convertCell(cell); } if (i == 0) { // dbCols.put(j, cellValue); break; } else { /*if (i == 1 && j == firstCol && cellValue.equals("")) {// 实际数据为空的情况 flagEmpty = "flagTrue"; uploadMap.put("flagEmpty", flagEmpty); uploadMap.put("itemList", itemList); return uploadMap; }*/ if (i >= 1 && j == firstCol && cellValue.equalsIgnoreCase("")) {// 若第一个为空作为空行不做处理 flagNotEmptyRow = false; rmaInfovo = null; rmaRecvDetailvo = null; break; } if (i >= 1 && j == firstCol && cellValue.equalsIgnoreCase("END")) {// 碰到第一列的内容为“END”时,读取结束(不区分大小写) flagNotEmptyRow = false; rmaInfovo = null; rmaRecvDetailvo = null; uploadMap.put("flagEmpty", flagEmpty); uploadMap.put("itemList", itemList); return uploadMap; } // 下面是读取列的数据 if (j == 0) { // 对应Oracle // 中客户代码 rmaInfovo.setOracleCode(cellValue); // 注意此处保存的是文本,保存数据库时要先插入ID } else if (j == 1) { // 对应RMA // 类型 rmaInfovo.setRmaType(cellValue); } else if (j == 2) { // 对应Oracle // 中产生的RMA单号 rmaInfovo.setRmaNo(cellValue); } else if (j == 3) { // 对应实际出运的料号 rmaRecvDetailvo.setPn(cellValue);// 注意此处保存的是文本,保存数据库时要先插入ID } else if (j == 4) { // 对应实际出运的数量 cellValue = StringUtil.ToDBC(cellValue); if(!StringUtil.isNumer(cellValue)){// 非数字,默认-100 qty=-100; }else{// <=0的也默认-100 qty = Integer.valueOf(cellValue); if(qty<=0){ qty=-100; } } rmaRecvDetailvo.setQuantity(qty); } else if (j == 5) { // 对应N-0:非保税 // 空或者Y-1:保税 rmaInfovo.setIsTaxFree(StringUtil.convertNullIntoString(cellValue, "Y")); // 需要将YN转成10 } else if (j == 6) { // 对应收货库别 rmaInfovo.setWh(cellValue); } else if (j == 7) { // 对应RMA产生时间 rmaInfovo.setRmaTime(cellValue); } else if (j == 8) { // 对应是否工厂退回(Y-1:PID // 空或者N-0:非PID) rmaInfovo.setIsPid(StringUtil.convertNullIntoString(cellValue, "N")); } } } if (i > 0 && flagNotEmptyRow) { rmaInfovo.setRmaRecvDetailvo(rmaRecvDetailvo); itemList.add(rmaInfovo); } } } } } else {// -- 读取excel文件的内容结束 throw new IOException("no input file specified"); } } finally { if (fis != null) { fis.close(); } if (filePath != null && !filePath.equals("")) { // 删除临时文档 File file = new File(filePath); if (file.exists()) { file.delete(); } } } uploadMap.put("flagEmpty", flagEmpty); uploadMap.put("itemList", itemList); return uploadMap; }