java读取两种格式(xls、xlsx)的Excel

1.代码如下

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * @author zhangzq
 * @date 2018年02月28日
 */
public class ReadExcelFile {
	//读取xlsx结尾的EXCEL	
	public static List<String[]> readExcelsXLSX(String path) throws IOException{
		InputStream is = null;
		//创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回 
		List<String []> list = new ArrayList<String[]>();
		try {
			is =new FileInputStream(path);
			//创建WorkBook
			XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
			
			for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
				//创建一个Excel的sheet,定位到当前Sheet
				XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
				//第一行
				int firstRowNum = xssfSheet.getFirstRowNum();
				//最后一行
				int lastRowNum = xssfSheet.getLastRowNum();
				//循环第二行到最后一行
				for(int i = firstRowNum+1; i <= lastRowNum; i++ ) {
					//定位到当前行
					Row row = xssfSheet.getRow(i);
					
					//第一列
					int firstCellNum = row.getFirstCellNum();
					//获得当前行的最大列数
					int lastCellNum = row.getPhysicalNumberOfCells();
					//创建数组存放当前行的数据
					String[] cells = new String[lastCellNum];
					//循环当前行
					for(int j = firstCellNum; j <lastCellNum; j++ ) {
						//申请Cell空间
						XSSFCell cell = (XSSFCell) row.getCell(j);
						cells[j] = getCellValue(cell);
					}
					list.add(cells);
				}
				is.close();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			is.close();
		}
		return list;
	}
	
	
	//读取xls格式Excel
	public static List<String[]> readExcels(String path) throws IOException{
		InputStream is = null;
		//创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回 
		List<String []> list = new ArrayList<String[]>();
		try {
			is =new FileInputStream(path);
			//创建WorkBook
			HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
			
			for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
				//创建一个Excel的sheet,定位到当前Sheet
				HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
				//第一行
				int firstRowNum = hssfSheet.getFirstRowNum();
				//最后一行
				int lastRowNum = hssfSheet.getLastRowNum();
				//循环第二行到最后一行
				for(int i = firstRowNum+1; i <= lastRowNum; i++ ) {
					//定位到当前行
					Row row = hssfSheet.getRow(i);
					
					//第一列
					int firstCellNum = row.getFirstCellNum();
					//获得当前行的最大列数
					int lastCellNum = row.getPhysicalNumberOfCells();
					//创建数组存放当前行的数据
					String[] cells = new String[lastCellNum];
					//循环当前行
					for(int j = firstCellNum; j <lastCellNum; j++ ) {
						//申请Cell空间
						HSSFCell cell = (HSSFCell) row.getCell(j);
						cells[j] = getCellValue(cell);
					}
					list.add(cells);
				}
				is.close();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			is.close();
		}
		return list;
	}
	
	
	//获取xls单元格数据
	 public static String getCellValue(HSSFCell cell){  
	        String cellValue = "";  
	        if(cell == null){  
	            return cellValue;  
	        }  
	        //把数字当成String来读,避免出现1读成1.0的情况  
	        if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){  
	            cell.setCellType(Cell.CELL_TYPE_STRING);  
	        }  
	        //判断数据的类型  
	        switch (cell.getCellType()){  
	            case Cell.CELL_TYPE_NUMERIC: //数字  
	                cellValue = String.valueOf(cell.getNumericCellValue());  
	                break;  
	            case Cell.CELL_TYPE_STRING: //字符串  
	                cellValue = String.valueOf(cell.getStringCellValue());  
	                break;  
	            case Cell.CELL_TYPE_BOOLEAN: //Boolean  
	                cellValue = String.valueOf(cell.getBooleanCellValue());  
	                break;  
	            case Cell.CELL_TYPE_FORMULA: //公式  
	                cellValue = String.valueOf(cell.getCellFormula());  
	                break;  
	            case Cell.CELL_TYPE_BLANK: //空值   
	                cellValue = "";  
	                break;  
	            case Cell.CELL_TYPE_ERROR: //故障  
	                cellValue = "非法字符";  
	                break;  
	            default:  
	                cellValue = "未知类型";  
	                break;  
	        }  
	        return cellValue;  
	    }  
	//获取xlsx单元格数据
	 public static String getCellValue(XSSFCell cell){  
	        String cellValue = "";  
	        if(cell == null){  
	            return cellValue;  
	        }  
	        //把数字当成String来读,避免出现1读成1.0的情况  
	        if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){  
	            cell.setCellType(Cell.CELL_TYPE_STRING);  
	        }  
	        //判断数据的类型  
	        switch (cell.getCellType()){  
	            case Cell.CELL_TYPE_NUMERIC: //数字  
	                cellValue = String.valueOf(cell.getNumericCellValue());  
	                break;  
	            case Cell.CELL_TYPE_STRING: //字符串  
	                cellValue = String.valueOf(cell.getStringCellValue());  
	                break;  
	            case Cell.CELL_TYPE_BOOLEAN: //Boolean  
	                cellValue = String.valueOf(cell.getBooleanCellValue());  
	                break;  
	            case Cell.CELL_TYPE_FORMULA: //公式  
	                cellValue = String.valueOf(cell.getCellFormula());  
	                break;  
	            case Cell.CELL_TYPE_BLANK: //空值   
	                cellValue = "";  
	                break;  
	            case Cell.CELL_TYPE_ERROR: //故障  
	                cellValue = "非法字符";  
	                break;  
	            default:  
	                cellValue = "未知类型";  
	                break;  
	        }  
	        return cellValue;  
	    }  
}


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值