Java利用poi解析xlsx和xls文件

遇到过处理excel的问题,在网上找了很久,感觉他们的代码太乱太复杂,这是我精简版的excel处理代码,简单暴力。
首先,为什么使用poi?jxl只能处理03版之前的excel,也就是xls结尾的,不能处理xlsx。poi兼容两种格式,poi解析两种格式的文件时,唯一的不同就是xls时,为HSSF;xlsx时,为XSSF。

首先是处理Cell对象的小方法:

//这个方法对cell进行处理,传入cell对象,返回cell中内容,String类型。
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;
	}

两种处理excel的代码:

xls时:
InputStream inputStream = new FileInputStream("绝对路径.xls");
		HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
		HSSFSheet s = workbook.getSheetAt(0);
		for (int j = 0; j < s.getPhysicalNumberOfRows(); j++) {//获取总行数
			Row row = s.getRow(j); // 取出第i行 getRow(index) 获取第(j)行
			for (int k = 0; k < row.getPhysicalNumberOfCells(); k++) { // getPhysicalNumberOfCells() 获取当前行的总列数
				String value1 = getCellFormatValue(row.getCell(k));//取出第j行第k列的值
				System.out.println(value1);
			}
		}
		workbook.close();
xlsx时:
InputStream inputStream = new FileInputStream("绝对路径.xlsx");
		XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
		XSSFSheet s = workbook.getSheetAt(0);
		for (int j = 0; j < s.getPhysicalNumberOfRows(); j++) {//获取总行数
			Row row = s.getRow(j); // 取出第i行 getRow(index) 获取第(j)行
			for (int k = 0; k < row.getPhysicalNumberOfCells(); k++) { // getPhysicalNumberOfCells() 获取当前行的总列数
				String value1 = getCellFormatValue(row.getCell(k));//取出第j行第k列的值
				System.out.println(value1);
			}
		}
		workbook.close();

你可能感兴趣的:(Java利用poi解析xlsx和xls文件)