Java POI 解析Excel(xls、xlsx格式同时支持)

随手写个简单摘要:

    POI大家都不陌生,经常拿来解析excel表格。

    其中,xls格式的需要使用HSSFWorkbook类来解析,xlsx格式的需要使用XSSFWorkbook格式来解析。

   那么如何整合二者呢。

代码目录:

1.传入文件名称,获取workbook对象;

2.使用workbook对象操作excel表格;

3.辅助代码;

一、获取workbook对象<重要代码>

	/**
	 * xls/xlsx都使用的Workbook
	 *
	 * @param fileName
	 * @return
	 * @author 吕小布  2018年10月26日
	 */
	public static Workbook readExcel(String fileName){
		Workbook wb = null;
        if(fileName==null){
            return null;
        }
        String extString = fileName.substring(fileName.lastIndexOf("."));
        InputStream is = null;
        try {
            is = new FileInputStream(fileName);
            if(".xls".equals(extString)){
                return wb = new HSSFWorkbook(is);
            }else if(".xlsx".equals(extString)){
                return wb = new XSSFWorkbook(is);
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return wb;
	}

二、使用workbook对象操作excel表格

/**
	 * Description: 解析excel简单例子
	 *
	 * @param fileName
	 * @author 吕小布  2018年11月7日
	 */
	public void analyzeDemo(String fileName){

		try {
			Workbook wb = readExcel(fileName); // 获得excel文件对象workbook
			
			Sheet s = wb.getSheetAt(0); // 获取指定工作表<这里获取的是第一个>
			
			//循环行  sheet.getPhysicalNumberOfRows()是获取表格的总行数
			for (int i = 0; i < s.getPhysicalNumberOfRows(); i++) {
				System.out.println("第"+(i+1)+"行内容:");
				
				Row row = s.getRow(i); // 取出第i行  getRow(index) 获取第(index+1)行

				for (int j = 0;j < row.getPhysicalNumberOfCells(); j++) {  // getPhysicalNumberOfCells() 获取当前行的总列数
					String value1 = getCellFormatValue(row.getCell(0)); //getCell 获取单元格中的内容
					System.out.print(value1+"");
				}
				
				System.out.println("");
			}

		} catch (IndexOutOfBoundsException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

三、辅助代码,对单元格的内容进行format<可有可无>

/**
	 * format表格内容
	 *
	 * @param cell
	 * @return
	 * @author 吕小布  2018年10月26日
	 */
	public static String getCellFormatValue(Cell cell){
        String cellValue = "";
        if(cell!=null){
            //判断cell类型
            switch(cell.getCellType()){
            case Cell.CELL_TYPE_NUMERIC:{
                cellValue = String.valueOf(cell.getNumericCellValue());
                break;
            }
            case Cell.CELL_TYPE_STRING:{
                cellValue = cell.getRichStringCellValue().getString();
                break;
            }
            default:
                cellValue = "";
            }
        }
        return cellValue;
    }

就此,关键代码全部结束,其余的地方得靠自己啦。

如果有书写错误的地方,请各位客官及时指出,以免误人子弟,遗臭万年。
你好,我叫吕小布

 

你可能感兴趣的:(java)