FileInputStream fStream = new FileInputStream(filePath);
LoadOptions lo = new LoadOptions(FileFormatType.XLSX);
lo.setPassword(PASSWORD);
Workbook workbook = new Workbook(fStream, lo);
Worksheet worksheet = workbook.getWorksheets().get(SHEET_NAME);
上記処理にて、120MByteのXLSXファイルを読み取らせると
Workbookオブジェクトの生成処理において、
「java.lang.OutOfMemoryError: Java heap space」
が発生してしまいます。
※Java起動時におけるJVMの「-Xmx」オプションは許される限りの値を設定しています。
特定のシートに記載されているデータを読み取ることをしたいため、
メモリ上(JVM上)にWorkbookオブジェクトやWorksheetオブジェクトを生成する必要はなく、
保存されているExcelファイルから直接、RowオブジェクトやCellオブジェクトを生成する方法(コーディング)はないでしょうか。
Workbookオブジェクトを生成する必要があるとしても、
極力メモリ使用量を使わないコーディングをご教示いただければと思います。
※極力メモリの使用量を削減し、ヒープエラーを発生させたくありません。
使用バージョン:aspose-cells-17.11-java
OS:Linux
以上、お手数をお掛けいたしますが、ご確認・ご教示をお願いいたします。
@Susumu_Ogura,
詳細をありがとう。
大容量のファイルをロードしているので、処理にはもっとたくさんのメモとCPUが必要です。私はあなたが試着してもらえないと思う:
例えば
1)ファイルを読み込みながら、メモリの設定を試してください。参照用のドキュメントを参照してください:Optimizing Memory Usage while Working with Big Files having Large Datasets
2)さらに、軽量でパフォーマンス指向のモードでワークブック内の巨大なデータセットを(順番に)読み書きするために使用されることも1つのアプローチがあります。これは、LightCells APIと呼び出すイベント駆動型フレームワークです 詳細は、次のドキュメントを参照してください。
Using LightCells API
依然として問題を把握できなかった場合は、テンプレートExcelファイルをお知らせください。すぐに確認します。ファイルを一部のファイル共有サービス(DropBox、Googleドライブなど)にアップロードして、ここでダウンロードリンクを共有することができます。
PS. Aspose.Cells for Java v18.3.xの最新バージョン/修正をお試しください。
回答ありがとうございます。
CPUやメモリを増やす検討を継続して行いますが、
1)ファイルを読み込みながら、メモリの設定を試してください。参照用のドキュメントを参照してください: : Optimizing Memory Usage while Working with Big Files having Large Datasets
上記のパターンで、メモリ使用量の削減と処理時間の短縮が図れたため、
こちらを採用したいと考えています。
@Susumu_Ogura,
メモリオプションがあなたのニーズに合っていることを知っておいていますよ。さるな助けが必要な場合や、その他の問題や質問がある場合は、お気軽にお返事ください。すぐにお手伝いします します。