2012-04-14 3 views
0

現在、私は適度に巨大なExcelシート(10-15MB)を読んでから、いくつかの列を選択して、 Excelシートの行数。選択した列のみが含まれます。大きなExcelファイルをJavaで読み込むアプリケーションを設計する際の問題

例:わかりやすくするため。 私のxlシートにName、empid、email、mobileNo:と5つのカラムが含まれているとします。アドレスと合計行またはレコードが50000であるとします。それぞれName、mobileNo:およびemailIdのみを含むテキストファイルを作成します。

エクセルシートのサイズは巨大で、エクセルシートはxlsxまたはxlsでもかまいません。私はそれを読むためにapache poiを使用しています。しかし、私はこの後に続くべき最善のアプローチを決めることができません。

アプローチ1:Excelシート全体をmysqlのようなデータベースに移動する必要がありますか。だから、私は、検索されたヘッダー列に基づいてその場でテーブルを作成し、その中のすべての行をダンプする必要があります。選択クエリを使用して必要な列を取得し、テキストファイルを作成する

アプローチ2:私は、オンザフライでクラスファイルを作成できるASMライブラリについて読んでいます。私は行ごとにオブジェクトを作成し、すべてをリストに追加することを考えていました。しかし、ここで特定の列を検索するには多くの反復が必要となり、リストのサイズはExcelシートの行に比例します。

現在、私はどのようなアプローチも決めることができません。

+1

私はまだ比較的新しいですが、あなたが問題を過度に考えているように思えます。エンドポイントが単なるファイルの場合は、データベース、リフレクション、ファンシーライブラリは必要ありません。これは、使用する列のインデックスを追跡するコレクションと、それらの列のアクティブな行から値を保持するコレクションのようなコレクションがほんの少し必要です。私は何かが欠けている場合は謝罪します。 – Elk

答えて

1

スプレッドシートの情報内容を保持するメモリ内のデータ構造を作成するだけではどうでしょうか?それを処理して、それから作業してください。

これは、各配列が行を表す文字列の配列のような単純なものになります。列名を扱うには、列名を列番号に対応付けるハッシュマップを使用してください。


スプレッドシートが大きすぎてメモリに格納できない場合を除いて、アプローチ1はオーバーキルです。

あなたのアプローチ2は不必要に複雑です。オンザフライでクラスファイルを作成しても、単純な汎用データ構造では達成できないことはありません。

+0

あなたの権利、私は適切なデータ構造を考えていました。このアプローチ自体を使用します..ありがとう –

関連する問題