2013-04-14 24 views
11

私は、書式(xlsまたはxlsx)に関係なく、Excelファイルからの読み書きが必要なプログラムを作成しています。xlsとxlsxからの読み込みと書き込みは、Javaのファイルexcher

私はApache POIについて認識していますが、xlsファイル(HSSF)とxlsx(XSSF)ファイルを処理するクラスが異なるようです。

私がここでやろうとしていることをどのように達成できるかを知っている人。 (POI以外のAPIを使用するためのアイデアも歓迎します)

+0

Apache Webサイトのチュートリアルに従ってみましたか?それほど難しいことではありません!あなた自身でいくつかのコードを書いてみてください! –

+0

私は試してみましたが、私の質問で言及したように、APIはさまざまな種類を扱うために異なるクラスを使います。以下の私のコメントを参照してください。 – Shiva

+0

さて、あなたは、下線の実装の詳細を隠すために独自のインターフェースを構築しなければならないと思います。たとえば、Abstract Factory Patternです。 –

答えて

22

それはちょうど共通SpreadSheet interfaces

あなたのコードのようなものになります使用し、非常に簡単です:あなたは、読み取り、書き込み、など既存のファイル、.XLSとの.xlsxの両方を編集することができます

Workbook wb = WorkbookFactory.create(new File("myFile.xls")); // Or .xlsx 
Sheet s = wb.getSheet(0); 
Row r1 = s.getRow(0); 
r1.createCell(4).setCellValue(4.5); 
r1.createCell(5).setCellValue("Hello"); 

FileOutputStream out = new FileOutputStream("newFile.xls"); // Or .xlsx 
wb.write(out); 
out.close(); 

を共通のインタフェースを使用している限り、まったく同じコードを使用してください。

2

拡張子からファイルタイプを検出し、適切なApache POIクラスを使用して処理するのはなぜですか?私はあなたの状況に絶対に普遍的なアウト・オブ・ザ・ボックス・ソリューションがあるのではないかと疑います。

+0

まさに私が避けることを望んでいたもの! – Shiva

+0

Apache POIのドキュメントを見ると、HSSFとXSSFの両方が同じインターフェースを実装しているようです。たとえば、HSSFWorkbookとXSSFWorkbookの両方に、Workbookインターフェイスがあります。 タイプを検出し、正しいタイプをインスタンス化するだけで、残りのコードは一般的なインターフェースで実行可能にする必要があります。 –

+1

POIはタイプを検出し、正しいオブジェクトを構築するためのクラスを提供します - 'WorkbookFactory' - 詳細については私の答えを見てください – Gagravarr

関連する問題