使用poi.jar讀取Excel文件


一、准備jar包

  1.poi.jar                    讀取xls格式的Excel     下載地址:https://mvnrepository.com/artifact/org.apache.poi/poi

  2.poi-ooxml.jar         讀取xlsx格式的Exce     下載地址:https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml

  3.poi-ooxml-schemas.jar                               下載地址:https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas

  4.xmlbeans.jar                                               下載地址:https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans

  注意:各位jar包的版本需要匹配,否則會因為版本沖突問題報錯。我這里使用的jar包版本分別為:poi-3.14.jar、poi-ooxml-3.14.jar、poi-ooxml-schemas-3.14.jar、xmlbeans-2.6.0.jar

二、主要API

  1.import org.apache.poi.ss.usermodel.Workbook,對應Excel文檔;

  2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,對應xls格式的Excel文檔;

  3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,對應xlsx格式的Excel文檔;

  4.import org.apache.poi.ss.usermodel.Sheet,對應Excel文檔中的一個sheet;

  5.import org.apache.poi.ss.usermodel.Row,對應一個sheet中的一行;

  6.import org.apache.poi.ss.usermodel.Cell,對應一個單元格。

三、測試代碼如下:

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

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
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.xssf.usermodel.XSSFWorkbook;

public class ExcelTest {

    public static void main(String[] args) throws Exception {
        String fileName = "E://abc.xlsx";
        readExcel(fileName);
    }

    private static void readExcel(String fileName) {
        Workbook workbook = null;
        Row row = null;
        //獲取Excel文檔
        workbook = getWorkbook(fileName);
        //獲取Excel文檔的第一個sheet頁
        Sheet sheet = workbook.getSheetAt(0);
        //獲取文檔中已保存數據的行數
        int rowNum = sheet.getPhysicalNumberOfRows();
        //獲取第一行
        row = sheet.getRow(0);
        //獲取當前行已保存數據的最大列數
        int colnum = row.getPhysicalNumberOfCells();
        for (int i = 0; i < rowNum; i++) {
            row = sheet.getRow(i);
            if (null != row)
            {
                for (int j = 0; j < colnum; j++) {
                    Cell cell = row.getCell(j);
                    System.out.println(getValueFromCell(cell));
                }
            }
        }
    }

    private static Workbook getWorkbook(String fileName) {//根據后綴獲取Excel表格
        Workbook workbook = null;
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        InputStream in = null;
        try {
            in = new FileInputStream(fileName);
            if ("xls".equals(suffix))
            {
                workbook = new HSSFWorkbook(in);
            }
            else if ("xlsx".equals(suffix))
            {
                workbook = new XSSFWorkbook(in);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return workbook;
    }
    
    private static Object getValueFromCell(Cell cell) {//獲取單元格的值
        Object value = null;
        if (null == cell)
        {
            return "";
        }
        //判斷cell類型
        switch(cell.getCellType()){
        case Cell.CELL_TYPE_NUMERIC:{
            value = String.valueOf(cell.getNumericCellValue());
            break;
        }
        case Cell.CELL_TYPE_FORMULA:{
            //判斷cell是否為日期格式
            if(DateUtil.isCellDateFormatted(cell)){
                //轉換為日期格式YYYY-mm-dd
                value = cell.getDateCellValue();
            }else{
                //數字
                value = String.valueOf(cell.getNumericCellValue());
            }
            break;
        }
        case Cell.CELL_TYPE_STRING:{
            value = cell.getRichStringCellValue().getString();
            break;
        }
        default:
            value = "";
        }
        return value;
    }
}

四、Execl文檔數據及打印結果

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM