java利用poi读取Excel文件

java读取Excel文件,笔者认为:从结构上来看,Excel文件是由一个一个的单元格组成的,有点像细胞cell,逐行的排列。那么我们读的时候也应该逐行逐行的读,从左到右的寻找每一个cell。

直播电商开发找捌跃科技

一、实例代码:

只是实现了一种方式,因为依照读取内容的不同,读取的后想要的操作不同,因此不能苟同全部,只是方法是相通的。

说道Excel文件的结构,这货从数学的角度来说,绝对是一个二维数组,因此我就拿字符串二维数组接受读取后的内容,并每个单元格每个单元格的打印。当然也可以返回三维数组(包含该单元格的位置坐标)。

/**

20181105 red_ant

@param file excel 格式的文件

@param ignoreRows 读取开头忽略的行数

@return 读取的结果

*/

publicstaticString[][] readExcelData(File file,intignoreRows) throws Exception{            List result =newArrayList();introwSize =0;            BufferedInputStreamin=newBufferedInputStream(newFileInputStream(file));//打开HSSWorkbookPOIFSFileSystem fs =newPOIFSFileSystem(in);            HSSFWorkbook wb =newHSSFWorkbook(fs);            HSSFCell cell =null;for(intsheetIndex =0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {                HSSFSheet st = wb.getSheetAt(sheetIndex);//从规定位置,开始逐行读取内容for(introwIndex = ignoreRows; rowIndex < st.getLastRowNum(); rowIndex++) {                    HSSFRow row = st.getRow(rowIndex);if(row ==null){continue;                    }inttempRowSize = row.getLastCellNum() +1;if(tempRowSize > rowSize){                        rowSize = tempRowSize;                    }                    String[] values =newString[rowSize];                    Arrays.fill(values,"");                    boolean hasValue =false;for(shortcolumnIndex =0; columnIndex < row.getLastCellNum(); columnIndex++) {                        Stringvalue="";                        cell = row.getCell(columnIndex);if(cell !=null){//设置字体编码//cell.setEncoding(HSSFCell.ENCODING_UTF_16);switch(cell.getCellType()) {caseHSSFCell.CELL_TYPE_STRING:value= cell.getStringCellValue();break;caseHSSFCell.CELL_TYPE_NUMERIC:if(HSSFDateUtil.isCellDateFormatted(cell)){                                    Date date = cell.getDateCellValue();if(date !=null){value=newSimpleDateFormat("yyyy-MM-dd").format(date);                                    }else{value="";                                    }                                }else{value=newDecimalFormat("0").format(cell.getNumericCellValue());                                }break;caseHSSFCell.CELL_TYPE_FORMULA://导入时如果为公式生成的数据则无值if(!cell.getStringCellValue().equals("")){value= cell.getStringCellValue();                                }else{value= cell.getNumericCellValue() +"";                                }break;caseHSSFCell.CELL_TYPE_BLANK:break;caseHSSFCell.CELL_TYPE_ERROR:value="";break;caseHSSFCell.CELL_TYPE_BOOLEAN:value= (cell.getBooleanCellValue() ==true?"Y":"N");break;default:value="";break;                            }                        }if(columnIndex  ==0&&value.trim().equals("")){break;                        }                        values[columnIndex] = removeSpaceTrim(value);                        hasValue =true;                    }if(hasValue){                        result.add(values);                    }                }            }in.close();            String[][] returnArray =newString[result.size()][rowSize];for(inti =0; i < returnArray.length; i++) {                returnArray[i] = (String[]) result.get(i);            }returnreturnArray;        }/**

        * 去掉字符串右边的空格

        * @param 要处理的字符串

        * @return 处理后的结果

        */privatestaticStringremoveSpaceTrim(Stringvalue){if(StringHelper.isEmpty(value)){return"";            }intlength =value.length();for(inti = length -1; i >=0; i--) {if(value.charAt(i) !=0x20){break;                }                length--;            }returnvalue.substring(0, length);        }

二、main函数的测试:

File file =newFile("D:\\red_ant_file\\20181105\\测试.xls");try{        String[][] result = AllServiceIsHere.readExcelData(file,2);introwLength = result.length;for(inti =0; i < rowLength; i++) {for(intj =0; j < result[i].length; j++) {                System.err.println(result[i][j] +"\t\t");            }            System.err.println("$$$$$$$$$$$$$");        }    }catch(Exception e) {        e.printStackTrace();    }

三、演示:

转自:http://blog.51cto.com/13479739/2313213

你可能感兴趣的:(java利用poi读取Excel文件)