JavaでExcelシートを読み取るための優れたAPIは何ですか-JXLまたはApache POI [終了]


94

2つのAPIのうち、Excelシートの読み取り/書き込み/編集が簡単なのはどれですか。これらのAPIはCSV拡張をサポートしていませんか?

file.xlsとfile.xlsxにJXLを使用すると、次のような例外が発生します。

jxl.read.biff.BiffException: Unable to recognize OLE stream
    at jxl.read.biff.CompoundFile.<init>(CompoundFile.java:116)
    at jxl.read.biff.File.<init>(File.java:127)
    at jxl.Workbook.getWorkbook(Workbook.java:268)
    at core.ReadXLSheet.contentReading(ReadXLSheet.java:46)
    at core.ReadXLSheet.init(ReadXLSheet.java:22)
    at core.ReadXLSheet.main(ReadXLSheet.java:72)

.xlsおよび.xlsx拡張子の両方。私が使用しているJavaのバージョンはJDK1.6です。


1
何について:「JavaでMicrosoft Excelスプレッドシート(​​JXL、Apache POIなど)を読み書きするためのAPIはどれですか?それぞれを使用するのに最適なシナリオは何ですか?」
Cléssioメンデス

回答:


258

私はJXL(現在は「JExcel」)とApache POIの両方を使用しました。最初はJXLを使用していましたが、現在はApache POIを使用しています。

最初に、両方のAPIに同じ終了機能があるものを次に示します。

  • どちらも無料です
  • セルのスタイル:配置、背景(色とパターン)、境界線(種類と色)、フォントサポート(フォント名、色、サイズ、太字、斜体、取り消し線、下線)
  • フォーミュラ
  • ハイパーリンク
  • マージされたセル領域
  • 行と列のサイズ
  • データのフォーマット:数値と日付
  • セル内でのテキストの折り返し
  • ペインをフリーズ
  • ヘッダー/フッターのサポート
  • 既存および新しいスプレッドシートの読み取り/書き込み
  • どちらも、既存のオブジェクトを可能な限りそのままの状態でスプレッドシートに保存しようとします。

ただし、多くの違いがあります。

  • おそらく最も大きな違いは、Java JXLがExcel 2007+の「.xlsx」形式をサポートしていないことです。古いBIFF(バイナリ) ".xls"形式のみをサポートします。Apache POIは、共通の設計で両方をサポートします。
  • さらに、C#APIがあるように見えますが、JXL APIのJava部分は2009年に最後に更新されました(これを書いている時点で3年、4か月前)。Apache POIは積極的に維持されています。
  • JXLは条件付きフォーマットをサポートしませんが、Apache POIはサポートしますが、独自のコードで条件付きでセルをフォーマットできるため、これはそれほど重要ではありません。
  • JXLはリッチ テキスト形式、つまりテキスト文字列内の異なる形式をサポートしていません。Apache POIはこれをサポートしています。
  • JXLは特定のテキスト回転のみをサポートします:水平/垂直、+ /-45度、およびスタック。Apache POIは、任意の整数度と積み上げをサポートしています。
  • JXLは図形の描画をサポートしていません。Apache POIにはあります。
  • JXLは、ランドスケープ/ポートレート、マージン、用紙サイズ、ズームなどのほとんどのページ設定をサポートしています。Apache POIは、これらすべてに加えて、行と列の繰り返しをサポートしています。
  • JXLは分割ペインをサポートしていません。Apache POIにはあります。
  • JXLはチャートの作成または操作をサポートしていません。そのサポートはApache POIにはまだありませんが、APIが徐々に形成され始めています。
  • Apache POIには、JXLよりも豊富なドキュメントとサンプルのセットが用意されています。

さらに、POIにはメインの「usermodel」APIだけでなく、スプレッドシートのコンテンツを読み取るだけのイベントベースのAPIも含まれています。

結論として、より優れたドキュメント、より多くの機能、活発な開発、Excel 2007+形式のサポートのため、Apache POIを使用します。


詳しい説明ありがとうございます。
スワガティカ2013

8
明確で簡潔、かつ非常に役立つ+1
Ron

1
getContents()JExcelAPI のダーティーメソッドを使用すると、時間を大幅に節約できます。POIでは、そのセルタイプを確認してから、その値を取得する必要があります(数値セルの場合は、日付セルかどうかを確認する必要があります)。そのタイプに従って、最後に、さまざまなメソッドで文字列値に変換するので、非常に不便です。POIがJExcelAPIのような汚いが便利なメソッドを提供しないとは想像できません。
LiuYan刘研2014

1
POIがイベントベースのリーディングである場合、非常にポジティブなことです。特にモバイルデバイス(= Android)では、ヒープサイズとGCが制限されている場合に役立ちます。JXLで単純なXLSを読み取ると、アプリのメモリ制限に達し、アプリがクラッシュすることがよくありました。
dermatthias 2014

2
POIへの移行を可能にした重要な要素の1つは、大量のデータでExcelを読みたい場合に必須であるSteaming APIを使用する柔軟性です。Excelのデータが膨大な場合、Excelを開いたときにwoleデータがメモリに読み込まれないようにする必要があります。ストリーミングでは、シートを解析した直後に、ExcelまたはOfficeドキュメントのコンテンツ全体がメモリに読み込まれることはありません。
Ashok Koyi 2014年

12

POIを使用しました。

それを使用する場合は、それらのセルフォーマッタに注意してください。1つを作成し、セルごとに作成するのではなく数回使用します。これは、メモリ消費量の大きな違いまたは大きなデータです。


5

私はJXLに精通していませんが、POIを使用しています。POIは適切に管理されており、バイナリ.xls形式と、Office 2007で導入された新しいxmlベースの形式の両方を処理できます。

CSVファイルはExcelファイルではなく、テキストベースのファイルなので、これらのライブラリはそれらを読み取りません。自分でCSVファイルを解析する必要があります。私はCSVファイルライブラリを認識していませんが、まだ確認していません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.