2017-03-24 51 views
0

Apache POIを使用して、Excelファイルの最初のシートにのみデータを読み込みます。送信されるxlsxファイルは通常1枚しかなく、2.5MB(データが130KBを少し上回る)であり、すべてが遅くて滑らかになり、エラーは発生しません。しかし、提出されたxlsxに複数のシートがあり、他のシートにも多くのデータがある場合、実行はOutOfMemoryError:Javaヒープ・スペース・エラーをスローします。今私は何らかの理由で、メモリエラーについて心配することなく、最初のシートのデータだけを常に読み込むことができるかどうかを判断しようとしています。(-Xmx1024m -Xms512m引数でこれを実行しています)Apache POIの最初のシートを強制的に読み取る

InputStream inputStream = new FileInputStream(new File(excelfile)); 
XSSFWorkbook workbook = new XSSFWorkbook(inputStream); 

    if (workbook.getNumberOfSheets() != 1) { 
     throw new Exception("Make sure excel only has 1 sheet"); 
    } 

(Excelファイルは、同様に第二のシート上のデータをたくさん持っている場合)プログラムは、私は、

+0

と私はメモリの制限を変更しなければならない場合は理想的でしょう。 – JapanGuy

答えて

2

のApache POIは、通常、メモリに関連する問題の多くをトリガーする二行目でエラーを投げています代わりにmonitorjbsを使用することを強くお勧めします。https://github.com/monitorjbl/excel-streaming-reader

InputStream is = new FileInputStream(new File(filePath)); 
       Workbook workbook = StreamingReader.builder() 
         .rowCacheSize(100) // number of rows to keep in memory (defaults to 10) 
         .bufferSize(2048) // buffer size to use when reading InputStream to file (defaults to 1024) 
         .open(is)) { 

      Sheet sheet = workbook.getSheetAt(0); 
+0

はこれを明日行ってくれます!ありがとう! – JapanGuy

関連する問題