首页 > 代码库 > Poi解析Excel

Poi解析Excel

Poi解析Excel

Poi包里有4个主要的类,包括:

Workbook------工作表,通过WorkbookFactory的create(FileInputStream fis)方法获取,

Sheet------------表格,Workbook实例的getSheetAt(int num)方法获取,

Row--------------行,Sheet实例的getRow(int num)方法获取,

Cell--------------单元格,Row实例的getCell(int num)方法获取,

最后通过Cell实例根据数据类型调用对应的方法获取单元格的值。

下面是我做的一个实例。

excel文件内容:包含字符串、日期、数值、公式等数值类型

java代码

public class Poi {  
      
    
    private Sheet sheet;    //表格类实例  
    LinkedList[] result;    //保存每个单元格的数据 ,使用的是一种链表数组的结构  
  
    //读取excel文件,创建表格实例  
    private void loadExcel(String filePath) {  
        FileInputStream inStream = null;  
        try {  
            inStream = new FileInputStream(new File(filePath));  
            Workbook workBook = WorkbookFactory.create(inStream);  
             
            sheet = workBook.getSheetAt(0);           
        } catch (Exception e) {  
            e.printStackTrace();  
        }finally{  
            try {  
                if(inStream!=null){  
                    inStream.close();  
                }                  
            } catch (IOException e) {                  
                e.printStackTrace();  
            }  
        }  
    }  
    //获取单元格的值  
    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 =http://www.mamicode.com/ cell.getNumericCellValue();  
                        int intValue = http://www.mamicode.com/(int) value;  
                        cellValue = value - intValue =http://www.mamicode.com/= 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:{  
                    try{  
                        cellValue = String.valueOf(cell.getNumericCellValue());  
                    }catch(IllegalStateException e){  
                        cellValue = String.valueOf(cell.getRichStringCellValue());  
                    }  
                      
                }  
                    break;  
                case Cell.CELL_TYPE_BLANK:  
                    cellValue = "";  
                    break;  
                case Cell.CELL_TYPE_ERROR:  
                    cellValue = "";  
                    break;  
                default:  
                    cellValue = cell.toString().trim();  
                    break;  
            }  
        }  
        return cellValue.trim();  
    }  
  
  
  
    //初始化表格中的每一行,并得到每一个单元格的值  
    public  void init(){  
        int rowNum = sheet.getLastRowNum() + 1;  
        result = new LinkedList[rowNum];  
        for(int i=0;i<rowNum;i++){  
            Row row = sheet.getRow(i);  
            //每有新的一行,创建一个新的LinkedList对象  
            result[i] = new LinkedList();  
            for(int j=0;j<row.getLastCellNum();j++){  
                Cell cell = row.getCell(j);  
                //获取单元格的值  
                String str = getCellValue(cell);  
                //将得到的值放入链表中  
                result[i].add(str);  
            }  
        }  
    }  
    //控制台打印保存的表格数据  
    public void show(){  
        for(int i=0;i<result.length;i++){  
            for(int j=0;j<result[i].size();j++){  
                System.out.print(result[i].get(j) + "\t");  
            }  
            System.out.println();  
        }  
    }  
    public static void main(String[] args) {  
        Poi poi = new Poi();  
        poi.loadExcel("jxl.xls");  
        poi.init();  
        poi.show();  
    }  
      
}  

 

Poi解析Excel