JavaでExcelファイル(.xlsx)を読む:POIサンプル: 万象酔歩に詳しく書いてあるけど、ちょっと古いのでこの投稿を参考に最新版で試してみる。

POIをダウンロードページ(Apache POI - Download Release Artifacts)からバージョン3.15のバイナリ版をダウンロードする。
ダウンロードしたファイルを解凍して、poi-3.15.jar、poi-ooxml-3.15.jar、poi-ooxml-schemas-3.15.jar、ooxml-lib/xmlbeans-2.6.0.jar、lib/commons-collections4-4.1.jarを追加する。とりあえず、次に示すソースを動かすのに必要なライブラリはこんだけだ。実際はダウンロードしたファイルに含まれているjarファイルを全部追加した方がいいだろな。

試したソースはこんな感じだ。

package testexcel;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
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;

/**
 *
 * @author miyamoto
 */
public class TestExcel {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Workbook workbook;
        
        // ファイルオープン
        try (InputStream is = TestExcel.class.getResourceAsStream("test.xlsx")) {
            workbook = new XSSFWorkbook(is);
            
            for (Sheet sheet : workbook) {  // 全シートまわす
                System.out.println("Sheet:" + sheet.getSheetName());
                for (Row row : sheet) {     //  行でまわす
                    for (Cell cell : row) { // 行内のセルでまわす
                        System.out.print(getStr(cell) + " ");
                    }
                    System.out.println();
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(TestExcel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    // セルのデータを文字列で取得
    public static String getStr(Cell cell) {
        switch(cell.getCellTypeEnum()) {
            case BOOLEAN:
                return Boolean.toString(cell.getBooleanCellValue());
            case FORMULA:
//                return cell.getCellFormula();     // ← 計算式が返る
                return Double.toString(cell.getNumericCellValue()); // 計算結果が返る。
                                                                    // 0除算でエラーになる場合例外が発生する。
            case NUMERIC:
                return Double.toString(cell.getNumericCellValue());
            case STRING:
                return cell.getStringCellValue();
            default:
                return "";
        }
    }
}

セルのタイプを取得するメソッドのgetCellTypeが非推奨だったのでドキュメントによると「getCellTypeEnumを使え」みたいに書いてあったのだが、これも非推奨っぽい(^^;)代わりを探してみたんだが、それっぽいのがないのでしかたがないのでこれを使っている。

(追記)
SEさんがコメントされていますが、getCellTypeEnumが非推奨になっているのはpoiのバグらしいです。3.16で直っているそうです。