web-dev-qa-db-ja.com

JavaでExcelシートを読み取るための優れたAPIとは-JXLまたはApache POI

Excelシートの読み取り/書き込み/編集が簡単な2つのAPIはどれですか?これらの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です

91
Swagatika

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

最初に、両方のAPIの機能が同じであるものを以下に示します。

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

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

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

さらに、POIにはメインの「ユーザーモデル」APIだけでなく、スプレッドシートのコンテンツを読みたいだけの場合はイベントベースのAPIも含まれます。

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

250
rgettman

POIを使用しました。

それを使用する場合は、それらのセルフォーマッタに注目してください。セルフォーマッタを作成し、セルごとに作成する代わりに数回使用すると、メモリ消費の大きな違いや大きなデータになります。

12
user529543

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

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

5
jwesley

Javaで「プレーン」CSVファイルを読み取るために、OpenCSVと呼ばれるライブラリがあります。こちらから入手できます。 http://opencsv.sourceforge.net/

1
Jerry Oberle