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
网友评论