POIを使用して大きなxlsxファイルを読み取る最初のテストを実行しようとしていますが、小さなファイルを使用して単純なテストを実行すると、セルの値を表示できません。
誰かが私の間違いを教えてくれます。すべての提案は大歓迎です。ありがとう。
Test.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:
相談してください: 同様の質問 SXSSFWorkBookは書き込み専用であり、読み取りをサポートしていません。
。xlsxファイルの低メモリ読み取りについては、 XSSFおよびSAX EventModelのドキュメントをご覧ください:ガグラバー
メモリが問題にならない場合は、代わりに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());