13

POI で大きな xlsx ファイルを読み取る最初のテストを実行しようとしていますが、小さなファイルで簡単なテストを実行すると、セルの値を表示できません。

誰かが私の間違いを教えてくれます。すべての提案を歓迎します。ありがとう。

テスト.java:

import java.io.File;
import java.io.FileInputStream;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Test {

    public static void main(String[] args) throws Throwable {
        File file = new File("/tmp/test.xlsx");
        OPCPackage pkg = OPCPackage.open(new FileInputStream(file.getAbsolutePath()));
        XSSFWorkbook xssfwb = new XSSFWorkbook(pkg);

        SXSSFWorkbook wb = new SXSSFWorkbook(xssfwb, 100);
        Sheet sh = wb.getSheet("Hola");

        System.out.println("Name: "+sh.getSheetName()); // Line 19
        System.out.println("Val: "+sh.getRow(1).getCell(1).getStringCellValue()); // Line 20
    }
}

結果:

Name: Hola
Exception in thread "main" java.lang.NullPointerException
    at Test.main(Test.java:20)

test.xlsx:

ここに画像の説明を入力

4

2 に答える 2

28

相談してください:同様の質問SXSSFWorkBook は書き込み専用で、読み取りはサポートしていません。

メモリ不足の .xlsx ファイルの読み取りについては、XSSF および SAX EventModel のドキュメントを参照してください: Gagravarr

メモリが問題にならない場合は、代わりに XSSFSheet を使用できます。

    File file = new File("D:/temp/test.xlsx");
    FileInputStream fis = new FileInputStream(file);
    XSSFWorkbook wb = new XSSFWorkbook(fis);

    XSSFSheet sh = wb.getSheet("Hola");
    System.out.println(sh.getLastRowNum());
    System.out.println("Name: "+sh.getSheetName()); 
    Row row = sh.getRow(1);

    System.out.println(row.getRowNum());

    System.out.println("Val: "+sh.getRow(1).getCell(1).getStringCellValue()); 
于 2012-12-14T06:38:44.030 に答える