读取Excel工具类

需要的jar包

poi-3.13.jar

poi-ooxml-3.13.jar

poi-ooxml-schemas-3.13.jar

poi-scratchpad-3.9.jar

工具类1
java 复制代码
package com.test.poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 两种处理方式 xlsx/xls
 * @author zhaowanli
 *
 */
public class ExcelUtilReader {
	
	public static String[][] getExcelData(File file){
		if(file == null) return null;
		String name = file.getName();
		name = name.substring(name.lastIndexOf(".")+1);
		InputStream is = null;
		try {
			is = new FileInputStream(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		if("XLSX".equalsIgnoreCase(name)){
			return getExcelDateAF2007(is);
		}else if("XLS".equalsIgnoreCase(name)){
			return getExcelDateBF2007(is);
		}else{
			try {
				throw new Exception("文件格式不正确");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	//xls 2007 之前版本
	public static String[][] getExcelDateBF2007(InputStream inputStream) {
		String[][] data = null;
		HSSFWorkbook hssfwb = null;
		try {
			hssfwb = new HSSFWorkbook(inputStream);
			
			HSSFSheet hssfSheet = hssfwb.getSheetAt(0);
			data = new String[hssfSheet.getLastRowNum()+1][];
			int headerColNum = 0;
			for(int i = 0; i<=hssfSheet.getLastRowNum();i++){
				HSSFRow hssfRow = hssfSheet.getRow(i);
				if(i == 0 ){
					headerColNum = hssfRow.getLastCellNum();
				}
				data[i] = new String[headerColNum];
				for(int j = 0;j<hssfRow.getLastCellNum();j++){
					HSSFCell hssfCell = hssfRow.getCell(j);
					Object value = getHSSFCellValue(hssfCell);
					data[i][j] = value != null?String.valueOf(value): null;
				}
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(hssfwb != null){
					hssfwb.close();
				}
				if(inputStream != null){
					inputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return data;
	}
	
	public static Object getHSSFCellValue(HSSFCell hssfCell){
		if(hssfCell == null) return null;
		Object value = null;
		
		switch(hssfCell.getCellType()){
			case Cell.CELL_TYPE_NUMERIC :  //数值 0
				value = hssfCell.getNumericCellValue();
				break;
			case Cell.CELL_TYPE_STRING :  //字符串 1
				value = hssfCell.getStringCellValue();
				break;
			case Cell.CELL_TYPE_FORMULA :  //公式 2
				value = hssfCell.getStringCellValue();
				break;
			case Cell.CELL_TYPE_BLANK :  //空值 3
				value = null;
				break;
			case Cell.CELL_TYPE_BOOLEAN :  //布尔 4
				value = hssfCell.getBooleanCellValue();
				break;
			case Cell.CELL_TYPE_ERROR :  //错误 5
				value = hssfCell.getErrorCellValue();
				break;
			default :
				value = hssfCell.getStringCellValue();
		}
		
		return value;
	}
	
	
	//xlsx 2007 之后版本
	public static String[][] getExcelDateAF2007(InputStream inputStream) {
		String[][] data = null;
		XSSFWorkbook xssfwb = null;
		try {
			xssfwb = new XSSFWorkbook(inputStream);
			
			XSSFSheet xssfSheet = xssfwb.getSheetAt(0);
			data = new String[xssfSheet.getLastRowNum()+1][];
			int headerColNum = 0;
			for(int i = 0; i<=xssfSheet.getLastRowNum();i++){
				XSSFRow xssfRow = xssfSheet.getRow(i);
				if(i == 0 ){
					headerColNum = xssfRow.getLastCellNum();
				}
				if(xssfRow == null ){
					data[i] = new String[0];
					continue;
				}
				data[i] = new String[headerColNum];
				for(int j = 0;j<xssfRow.getLastCellNum();j++){
					XSSFCell xssfCell = xssfRow.getCell(j);
					Object value = getXSSFCellValue(xssfCell);
					data[i][j] = value != null?String.valueOf(value): null;
				}
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(xssfwb != null){
					xssfwb.close();
				}
				if(inputStream != null){
					inputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return data;
	}
	
	public static Object getXSSFCellValue(XSSFCell xssfCell){
		if(xssfCell == null) return null;
		Object value = null;
		
		switch(xssfCell.getCellType()){
			case Cell.CELL_TYPE_NUMERIC :  //数值 0
				value = xssfCell.getNumericCellValue();
				break;
			case Cell.CELL_TYPE_STRING :  //字符串 1
				value = xssfCell.getStringCellValue();
				break;
			case Cell.CELL_TYPE_FORMULA :  //公式 2
				value = xssfCell.getStringCellValue();
				break;
			case Cell.CELL_TYPE_BLANK :  //空值 3
				value = null;
				break;
			case Cell.CELL_TYPE_BOOLEAN :  //布尔 4
				value = xssfCell.getBooleanCellValue();
				break;
			case Cell.CELL_TYPE_ERROR :  //错误 5
				value = xssfCell.getErrorCellValue();
				break;
			default :
				value = xssfCell.getStringCellValue();
		}
		
		return value;
	}

}
工具类2
java 复制代码
package com.test.poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;

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.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 加强版: xlsx/xls 合并成一种处理方式
 * @author zhaowanli
 *
 */
public class ExcelUtilReader2 {
	
	public static SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
	
	public static String[][] getExcelData(File file){
		if(file == null) return null;
		String name = file.getName();
		name = name.substring(name.lastIndexOf(".")+1);
		InputStream is = null;
		Workbook workbook = null;
		String[][] data = null;
		try {
			is = new FileInputStream(file);
		
			if("XLSX".equalsIgnoreCase(name)){
				workbook = new XSSFWorkbook(is);
				data = getExcelDate(workbook);
			}else if("XLS".equalsIgnoreCase(name)){
				workbook = new HSSFWorkbook(is);
				data = getExcelDate(workbook);
			}else{
				try {
					throw new Exception("文件格式不正确");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(workbook != null){
					workbook.close();
				}
				if(is != null){
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		
		}
		
		return data;
	}
	
	public static String[][] getExcelDate(Workbook workbook){
		String[][] data = null;
		
		Sheet sheet = workbook.getSheetAt(0);
		data = new String[sheet.getLastRowNum()+1][];
		int headerColNum = 0;
		for(int i = 0;i<=sheet.getLastRowNum();i++){
			Row row = sheet.getRow(i);
			if(i == 0 ){
				headerColNum = row.getLastCellNum();
			}
			if(row == null ){
				data[i] = new String[0];
				continue;
			}
			data[i] = new String[headerColNum];
			for(int j =0;j<row.getLastCellNum();j++){
				Cell cell = row.getCell(j);
				Object value = getCellValue(cell);
				data[i][j] = value!=null?String.valueOf(value):null;
			}
		}
		
		return data;
	}
	
	public static Object getCellValue(Cell cell){
		
		if(cell == null) return null;
		Object value = null;
		switch(cell.getCellType()){
		case Cell.CELL_TYPE_NUMERIC :
			value = cell.getNumericCellValue();
			break;
		case Cell.CELL_TYPE_STRING:
			value = cell.getStringCellValue();
			break;
		case Cell.CELL_TYPE_FORMULA :  //公式 2
			value = cell.getStringCellValue();
			break;
		case Cell.CELL_TYPE_BLANK :  //空值 3
			value = null;
			break;
		case Cell.CELL_TYPE_BOOLEAN :  //布尔 4
			value = cell.getBooleanCellValue();
			break;
		case Cell.CELL_TYPE_ERROR :  //错误 5
			value = cell.getErrorCellValue();
			break;
		default :
			value = cell.getStringCellValue();
		}
		return value;
	}

}
相关推荐
言慢行善31 分钟前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星37 分钟前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟1 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z1 小时前
常见的限流算法和实现原理
java·开发语言
凭君语未可1 小时前
Java 中的实现类是什么
java·开发语言
He少年1 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
克里斯蒂亚诺更新1 小时前
myeclipse的pojie
java·ide·myeclipse
迷藏4941 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏4942 小时前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链
qq_433502182 小时前
Codex cli 飞书文档创建进阶实用命令 + Skill 创建&使用 小白完整教程
java·前端·飞书