今天發現以前的那個導入有問題,只是支持2003,並無支持2007及以上版本。poi 是支持目前excel的全部
java
版本的。只不過不一樣版本所使用的讀取方法名不同excel
也是發現網上不少的都是博文都是沒有判斷版本的,包括我以前借鑑的文章。code
File file = new File(path); getData(file, 0); //path是路徑,
重要代碼orm
public String[][] getData(File file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); // 打開HSSFWorkbook // POIFSFileSystem fs = new POIFSFileSystem(in); // HSSFWorkbook wb = new HSSFWorkbook(fs); // HSSFCell cell = null; // HSSFWorkbook:是操做Excel2003之前(包括2003)的版本,擴展名是.xls // XSSFWorkbook:是操做Excel2007的版本,擴展名是.xlsx // Workbook wb = null; int excel=0; InputStream inp= in; if(! inp.markSupported()) { inp = new PushbackInputStream(inp, 8); } if(POIFSFileSystem.hasPOIFSHeader(inp)) { System.out.println("2003及如下"); excel=2; } if(POIXMLDocument.hasOOXMLHeader(inp)) { System.out.println("2007及以上"); excel=3; } // if (!path.endsWith(".xls")) { // excel =1; // } // if(excel==2){ POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFCell cell = null; Map<Object, Object> headMap = new HashMap<Object, Object>(); inputID=0; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet st = wb.getSheetAt(sheetIndex);// 不取0行 表頭 // 第一行爲標題,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {// 不算標題 的行數 st.getLastRowNum()不算表頭的數目 HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } addressList = new AddressList(); boolean _b = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { // 循環列 cell = row.getCell(columnIndex); String sb=""; if (cell != null&&!cell.equals("")) { DecimalFormat df = new DecimalFormat("0");// 格式化 number String字符 switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING://String sb = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: //數字 sb = df.format(cell.getNumericCellValue()); //將科學計數的轉換 break; case HSSFCell.CELL_TYPE_FORMULA: // 導入時若是爲公式生成的數據則無值 if (!cell.getStringCellValue().equals("")) { sb = cell.getStringCellValue(); } else { sb = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: //空值 break; case HSSFCell.CELL_TYPE_ERROR: //異常類型直接空 sb = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: //布爾類型 sb = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: sb = ""; } String value=sb; //String value = cell.toString().trim(); if (rowIndex == 0) { if (value.toString().equals("姓名")) { headMap.put(columnIndex, "name"); }else if (value.toString().equals("職務")) { headMap.put(columnIndex, "zhiwu"); } else if (value.toString().equals("辦公室電話")) { headMap.put(columnIndex, "oph"); } else if (value.toString().equals("手機號碼")) { headMap.put(columnIndex, "tel"); } else if (value.toString().equals("傳真")) { headMap.put(columnIndex, "fax"); } else if (value.toString().equals("郵箱")) { headMap.put(columnIndex, "emall"); } else if (value.toString().equals("生日")) { headMap.put(columnIndex, "birthday"); } else if (value.toString().equals("地址")) { headMap.put(columnIndex, "address"); } else if (value.toString().equals("說明")) { headMap.put(columnIndex, "comments"); } else if (value.toString().equals("性別")) { headMap.put(columnIndex, "sex"); } } else { if (headMap.get(columnIndex) != null) { String _value = headMap.get(columnIndex).toString(); if (_value.equals("name")) { _b = true; addressList.setName(value); }else if (_value.equals("zhiwu")) { _b = true; String abc = jdbc.GetObject("select id from Code where codeName like '"+value+"'", "id"); if(abc==null||abc==""){ abc="0"; } addressList.setZhiwu(Integer.parseInt(abc)); } else if (_value.equals("oph")) { _b = true; addressList.setOph(value); } else if (_value.equals("tel")) { _b = true; addressList.setTel(value); } else if (_value.equals("fax")) { _b = true; addressList.setFax(value); } else if (_value.equals("emall")) { _b = true; addressList.setEmall(value); } else if (_value.equals("sex")) { _b = true; if (value.toString().equals("男")) { value = "0"; } else { value = "1"; } addressList.setSex(Integer.parseInt(value)); } else if (_value.equals("birthday")) { _b = true; if(value!=null&&!value.equals("")){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = sdf.parse(value); addressList.setBirthday(date); } catch (ParseException e) { // TODO Auto-generated catch block //e.printStackTrace(); addressList.setBirthday(null); } }else{ addressList.setBirthday(null); } } else if (_value.equals("address")) { _b = true; addressList.setAddress(value); } else if (headMap.get(columnIndex).toString() .equals("comments")) { _b = true; addressList.setComments(value); } } } } } if (_b) { addressList.setPid(pid); addressList.setType(type); addressList.setUserid(userid); addressList.setSort(0); addressListService.save(addressList); // inputID++; } } System.out.println("wwwwwwwwwwww "+inputID); } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; }else{ FileInputStream input = new FileInputStream(new File(path)); //讀取的文件路徑 XSSFWorkbook wb = new XSSFWorkbook(new BufferedInputStream(input)); XSSFCell cell = null; // 根據不一樣的data放置不一樣的表頭 Map<Object, Object> headMap = new HashMap<Object, Object>(); inputID=0; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { XSSFSheet st = wb.getSheetAt(sheetIndex);// 不取0行 表頭 // 第一行爲標題,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {// 不算標題 的行數 st.getLastRowNum()不算表頭的數目 XSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } addressList = new AddressList(); boolean _b = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { // 循環列 cell = row.getCell(columnIndex); String sb=""; if (cell != null&&!cell.equals("")) { DecimalFormat df = new DecimalFormat("0");// 格式化 number String字符 switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING://String sb = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: //數字 sb = df.format(cell.getNumericCellValue()); //將科學計數的轉換 break; case HSSFCell.CELL_TYPE_FORMULA: // 導入時若是爲公式生成的數據則無值 if (!cell.getStringCellValue().equals("")) { sb = cell.getStringCellValue(); } else { sb = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: //空值 break; case HSSFCell.CELL_TYPE_ERROR: //異常類型直接空 sb = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: //布爾類型 sb = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: sb = ""; } String value=sb; //String value = cell.toString().trim(); if (rowIndex == 0) { if (value.toString().equals("姓名")) { headMap.put(columnIndex, "name"); }else if (value.toString().equals("職務")) { headMap.put(columnIndex, "zhiwu"); } else if (value.toString().equals("辦公室電話")) { headMap.put(columnIndex, "oph"); } else if (value.toString().equals("手機號碼")) { headMap.put(columnIndex, "tel"); } else if (value.toString().equals("傳真")) { headMap.put(columnIndex, "fax"); } else if (value.toString().equals("郵箱")) { headMap.put(columnIndex, "emall"); } else if (value.toString().equals("生日")) { headMap.put(columnIndex, "birthday"); } else if (value.toString().equals("地址")) { headMap.put(columnIndex, "address"); } else if (value.toString().equals("說明")) { headMap.put(columnIndex, "comments"); } else if (value.toString().equals("性別")) { headMap.put(columnIndex, "sex"); } } else { if (headMap.get(columnIndex) != null) { String _value = headMap.get(columnIndex).toString(); if (_value.equals("name")) { _b = true; addressList.setName(value); }else if (_value.equals("zhiwu")) { _b = true; String abc = jdbc.GetObject("select id from Code where codeName like '"+value+"'", "id"); if(abc==null||abc==""){ abc="0"; } addressList.setZhiwu(Integer.parseInt(abc)); } else if (_value.equals("oph")) { _b = true; addressList.setOph(value); } else if (_value.equals("tel")) { _b = true; addressList.setTel(value); } else if (_value.equals("fax")) { _b = true; addressList.setFax(value); } else if (_value.equals("emall")) { _b = true; addressList.setEmall(value); } else if (_value.equals("sex")) { _b = true; if (value.toString().equals("男")) { value = "0"; } else { value = "1"; } addressList.setSex(Integer.parseInt(value)); } else if (_value.equals("birthday")) { _b = true; if(value!=null&&!value.equals("")){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = sdf.parse(value); addressList.setBirthday(date); } catch (ParseException e) { // TODO Auto-generated catch block //e.printStackTrace(); addressList.setBirthday(null); } }else{ addressList.setBirthday(null); } } else if (_value.equals("address")) { _b = true; addressList.setAddress(value); } else if (headMap.get(columnIndex).toString() .equals("comments")) { _b = true; addressList.setComments(value); } } } } } if (_b) { addressList.setPid(pid); addressList.setType(type); addressList.setUserid(userid); addressList.setSort(0); addressListService.save(addressList); // inputID++; } } System.out.println("wwwwwwwwwwww "+inputID); } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } System.out.println("zzzzzzzzzzzzzzz "+inputID); return returnArray; } } /** * 去掉字符串右邊的空格 * * @param str * 要處理的字符串 * @return 處理後的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); }