質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Q&A

解決済

1回答

1714閲覧

JavaでのExcelファイル(50M程度)の読み込みについて

nyankou

総合スコア18

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

0グッド

0クリップ

投稿2022/05/23 03:58

【前提・実現したいこと】
javaで50M程度のExcelファイルを読み込みたいです。
現在poiを使っていますが、メモリの消費が激しく、30M程度のファイルでもOut of  Memoryが発生してしまいます。
50M程度のExcelファイルでも読み込める方法はないかご相談させてください。

【発生している問題・エラーメッセージ】
Out of Memoryが発生。

【該当のソースコード】
FileInputStream in
= new FileInputStream(file_name);
Workbook book = null;
try {
book = WorkbookFactory.create(in);

【自分で調べたことや試したこと】
「excel-streaming-reader」というライブラリがあることを発見しました。
試そうと思いgithubに接続したのですが、ライブラリファイル(jar)をダウンロードするのでなく、ソースファイルしかダウンロードできないようでした。
ソースコードをダウンロードし、ソースファイルのフォルダに格納したのですが、おき場所が違うようでエラーが発生してしまい、断念しました。
https://github.com/monitorjbl/excel-streaming-reader

【使っているツールのバージョンなど補足情報】
netbeans 7.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiketa

2022/05/23 06:22

POIには、XSSF and SAX (Event API) https://poi.apache.org/components/spreadsheet/how-to.html#xssf_sax_api てのもありますね。 > メモリフットプリントが問題になる場合は、XSSFの場合、基になるXMLデータを取得して、自分で処理できます。これは、.xlsxファイルの低レベル構造を少し習得し、JavaでXMLを処理することに満足している中級開発者を対象としています。使い方は比較的簡単ですが、ファイル構造の基本を理解している必要があります。提供される利点は、比較的小さなメモリフットプリントでXLSXファイルを読み取ることができることです。
nyankou

2022/05/23 14:08

>>yamap55さん リンクの記載、ありがとうございました。リンク先にjarファイルがあったため、それを取り込んだところ、無事コンパイルエラーが解消しました! githubのサンプルに従い、以下のコードをかいたところ、後続の処理がされずfinallyに飛ばされてしまいました。 --------------- InputStream in = new FileInputStream(new File(file_name)); Workbook book = null; try { book = StreamingReader.builder() .rowCacheSize(1000) .bufferSize(4096) .open(in); --------------- try-catch構文の中に入れているのですが、catchでは } catch (EncryptedDocumentException e1) { } catch (OutOfMemoryError e) { しか入れていないため、何が原因でエラーとなっているかわからない状況です。 適したcatch文についてご教授いただけると幸いです。
nyankou

2022/05/23 14:11

>>shiketaさん 情報ありがとうございます! XSSFを使用してみたのですが、従来のやりかたよりも読み込みに時間がかかってしまいました。 おそらく私のコードの記載に誤りがあるのではないかと思われますのでもう少し確認してみます。
shiketa

2022/05/23 23:32

> 従来のやりかたよりも読み込みに時間がかかってしまいました。 あらそうですか。わたしが試したファイル(15MB)では、読み込みは圧倒的に早かったですけどね。内容によるのかしら。 まぁ、読み込んでみただけなので実用に供するところまで持っていくには「ファイル構造の基本を理解」するところからでしょうから、手間はかかるでしょうね。
nyankou

2022/05/26 12:44

>>shiketaさん ご返信ありがとうございます。 あれから、何回か試したのですが、やはり思うような結果が得られませんでした。 確かにExcelの内容によるかもしれません。 私の読み込み対象ファイルは、1,000列×10,000行くらいあり、中に関数も仕込まれています。 こんなファイルを読み込むこと自体が方針としてどうかと思うのですが、、、。 いったん今回の質問はクローズして、StreamingReaderに焦点をあて、改めて質問をさせていただこうと思います。 色々ご回答をいただき感謝申し上げます。
guest

回答1

0

自己解決

「excel-streaming-reader」について、頂いた情報より以下サイトにjarファイルがあることを確認できました。

https://search.maven.org/artifact/com.monitorjbl/xlsx-streamer/2.2.0/jar

ありがとうございました。

投稿2022/05/26 12:47

nyankou

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問