JAVA进行EXCEL解析

用的是POI的JAR包,兼容EXCEL2003及2007+版本的EXCEL

所需要的JAR包:

poi-3.8.jar

poi-ooxml.jar

poi-ooxml-schemas.jar

xmlbeans.jar

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.DateUtil;
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.ss.usermodel.WorkbookFactory;

public class ExcelAnalysis {
	 	private String filePath;
	    private String sheetName;
	    private Workbook workBook;    
	    private Sheet sheet;

	    public ExcelAnalysis(String filePath, String sheetName) {
	        this.filePath = filePath;
	        this.sheetName = sheetName;
	        this.load();
	    }    
	    /**
	     * 资源文件的加载
	     */
	    private void load() {
	        FileInputStream inStream = null;
	        try {
	            inStream = new FileInputStream(new File(filePath));
	            workBook = WorkbookFactory.create(inStream);
	            sheet = workBook.getSheet(sheetName);            
	        } catch (Exception e) {
	            e.printStackTrace();
	        }finally{
	            try {
	                if(inStream!=null){
	                    inStream.close();
	                }                
	            } catch (IOException e) {                
	                e.printStackTrace();
	            }
	        }
	    }
	    /**
	     * 获取单元格内的数据
	     * @param cell
	     * @return
	     */
	    private String getCellValue(Cell cell) {
	        String cellValue = "";
	        DataFormatter formatter = new DataFormatter();
	        if (cell != null) {
	            switch (cell.getCellType()) {
	                case Cell.CELL_TYPE_NUMERIC:
	                    if (DateUtil.isCellDateFormatted(cell)) {
	                        cellValue = formatter.formatCellValue(cell);
	                    } else {
	                        double value = cell.getNumericCellValue();
	                        int intValue = (int) value;
	                        cellValue = value - intValue == 0 ? String.valueOf(intValue) : String.valueOf(value);
	                    }
	                    break;
	                case Cell.CELL_TYPE_STRING:
	                    cellValue = cell.getStringCellValue();
	                    break;
	                case Cell.CELL_TYPE_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 = cell.toString().trim();
	                    break;
	            }
	        }
	        return cellValue.trim();
	    }
	    /**
	     * 获取某个sheet内的所有数据
	     * @return
	     */
	    private List<List<String>> getSheetData() {
	    	List<List<String>> listData = new ArrayList<List<String>>();
	        int numOfRows = sheet.getLastRowNum() + 1;
	        for (int i = 0; i < numOfRows; i++) {
	            Row row = sheet.getRow(i);
	            List<String> list = new ArrayList<String>();
	            if (row != null) {
	                for (int j = 0; j < row.getLastCellNum(); j++) {
	                    Cell cell = row.getCell(j);
	                    list.add(this.getCellValue(cell));
	                }
	            }
	            listData.add(list);
	        }
	        return listData;
	    }
	    /**
	     * 获取某行某列的数据
	     * @param row
	     * @param col
	     * @return
	     */
	    public String getCellData(int row, int col){
	        if(row<=0 || col<=0){
	            return null;
	        }
	        List<List<String>> listData = new ArrayList<List<String>>();
	        listData = this.getSheetData();
	        if(listData.size()>=row && listData.get(row-1).size()>=col){
	            return listData.get(row-1).get(col-1);
	        }else{
	            return null;
	        }
	    }

	    public static void main(String[] args) {
	        ExcelAnalysis eh = new ExcelAnalysis("D:\\111.xlsx","Sheet1");
	        List<List<String>> ls= eh.getSheetData();
	        //输出所有数据
	        for (int i = 0; i < ls.size(); i++) {
				List<String> lt = new ArrayList<String>();
				lt = ls.get(i);
				for (int j = 0; j < lt.size(); j++) {
					System.out.println(lt.get(j));
				}
				System.out.println("******************");
			}
	        //输出某个特定单元格的数据
	        System.out.println(eh.getCellData(1, 2));
	    }
}

PS:经过本人的精简

原博客链接:http://www.cnblogs.com/zhangfei/p/4171014.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值