1. 程式人生 > >Poi解析Excel

Poi解析Excel

根據 單元 trim 創建表 實例 args bsp rownum ring

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 = 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:{ 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