2011-01-20 21 views
6

大きなMicrosoft Excelファイル(.xlsと.xlsxの両方)を読み込むためのメモリ効率の良いJavaライブラリがありますか?私はApache POIでの経験は非常に限られていますが、これは思い出したものからは大量のメモリー塊であるようです(おそらくこれは書き込み用であって読み込み用ではないかもしれませんが)。何か良いことがありますか?またはPOIを誤解している、または誤って使用していますか?Excelファイルを読み込むメモリ効率のよいJavaライブラリですか?

"フレンドリー"なオープンソースライセンスも重要です。

+0

私が知っているだけで、他の一つはhttp://jexcelapi.sourceforge.net/です。私は自分自身を使ったことがないので、メモリ使用量について実際にコメントすることはできません。 – CoolBeans

+0

どのくらいのメモリがあまりにも多いのですか? –

+0

どのくらい多くのものが依存していますか。理想的には、ファイルが最初に.csvとして保存された場合に処理できるようなファイルであれば、Excelファイルとして処理できるかどうかを確認したいと思います。理想は不可能かもしれないが、私はもっと近づきたい。 –

答えて

5

ApacheのPOIライブラリには、メモリフットプリントが小さいevent-based APIがあります。残念ながら、これはHSSF(恐ろしいスプレッドシート形式)でのみ動作し、XSSF(XMLスプレッドシート形式 - OOXMLファイル用)では動作しません。

+0

ありがとうございますが、これはXSSFではうまくいかず、それはロット(> 65536)の行があるファイルに使用されるためです。 –

+3

実際には、XSSFの回避策があるようです。誰でもこれについてコメントすることができます:http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api –

+0

@Michaelはちょっとしたものですが、まともな回避策です。 XSSFは最終的にXMLであるため、SAXパーサーを使用してExcelファイルを解析しています。 –

1

Excelファイル形式は(両方)巨大で非常に複雑であり、可能なすべての内容を読み取るものはすべて同じように巨大で複雑になります。範囲、マクロ、リンク、埋め込まれたものなどを含めることができます。

数字のグリッドのような単純なものを読んでいる場合は、まずスプレッドシートをCSVのような簡単なものに変換してから読み込むことをおすすめします。

+0

CSVが推奨される形式ですが、ユーザーが.xlsファイルに保存されているCSVデータの量を持つことがあります。 Excelを開いてCSV形式で保存してから、アプリケーションに戻ってくるように伝えたくありません。明らかに、それはうまくいく回避策ですが、それは理想から遠いです。 –

0

はJExcelを見てみましょう:

http://jexcelapi.sourceforge.net/

私はメモリフットプリントを占めることができないが、明らかに大きなスプレッドシートを使用して、処理のために多くのメモリを消費するだろう。

あなたはXLSのためにそれを使用し、XLSXすることができるはずです。

Read XLSX file in Java

+1

JExcel APIは 'xlsx'ファイルを処理しません –

関連する問題