2017-12-19 23 views
2

私はApache POIを使用してExcelファイルを読み込みます。私のファイルは約100MBで、私はこのjava.lang.OutOfMemoryErrorを得た:そのあまりにも大きな-Xmxを使用する余裕がないので、java.lang.OutOfMemoryError:大規模なエクセルファイルのJavaヒープ領域

XSSFWorkbook workbook = new XSSFWorkbook(excelFilePath); 

ワークブックをロード中にJavaヒープをマイコンピュータのRAMが8ギガバイトです。だから私の質問は、私はこのエラーを処理できますか?

EDIT私のデータの

サンプル(私のデータを約1087490行です):すべての

enter image description here

+2

たとえば、いくつかの実験をすることによって? ** your machine **と* ** your workloadで動作する-Xmxの番号はわかりません。あなたは他の手で簡単に自分自身をテストすることができますか? – GhostCat

+0

どのデータがあなたのExcelファイルを100Mbにするのですか、それはテキストかイメージか何ですか? –

+0

私はすでにそれを実験しました。私のマシンのような外観は、このXSSFWorkbookを買う余裕はありませんが、私のマシンが100MBのファイルを読むことができる他のライブラリや方法はありますか? –

答えて

5

最初に - あなたはあなたのファイルは、明確に定義された範囲内であることを確認する必要がありますツールの制限 - hereを参照してください。その向こう

が、それは大きなファイルのためのメモリが不足するために、かなり共通の問題であるように思われ、一つの解決策は、「手動」XMLデータを処理することです。

If memory footprint is an issue, then for XSSF, you can get at the underlying XML data, and process it yourself. This is intended for intermediate developers who are willing to learn a little bit of low level structure of .xlsx files, and who are happy processing XML in java. Its relatively simple to use, but requires a basic understanding of the file structure. The advantage provided is that you can read a XLSX file with a relatively small memory footprint.

hereより引用)

+1

この場合、[デフォルトの制限](https://poi.apache.org/spreadsheet/limitations.html) – XtremeBaumer

+0

です。私のデータは約1087490レコード(行)です。私はこのソリューションをテストしようとします –

+2

[SXSSF(Streaming Usermodel API)](https://poi.apache.org/spreadsheet/how-to.html#SXSSF+%28Streaming+Usermodel+API%29)は "非常に大きなスプレッドシートが**生成されなければならない** " **読み込み**大容量ファイル[XSSFとSAX(イベントAPI)](https://poi.apache.org/spreadsheet/how-to.html#XSSF+and+SAX+%28Event+API%29)が必要です代わりに。 –

関連する問題