Apache Poiは、Javaで書かれた無料でオープンソースのクロスプラットフォームJava APIです。 Apache Poiは、Microsoft Officeフォーマットアーカイブを読み書きするためのJavaプログラムの機能を提供します。
プロジェクトのダウンロードページ:http://poi.apache.org/download.html
Apache Poiは、Office Open XML(OOXML)標準およびMicrosoftのOLE 2 Composite Document Format(OLE2)に準拠するさまざまなJava APIを作成および維持するJava APIです。 Javaを使用してMS Excelファイルを読み取り、作成および変更するために使用できます。さらに、Javaを使用して、MS WordおよびMSPOWERPOINTファイルを読み取り、作成することもできます。 Apache PoiはJava Operation Excelソリューションを提供します。
Excelドキュメントを読む例
POIのHSSFWorkBookを使用して、Excelデータを読み取ります。
public void Test(file file)throws ioexception {inputstream inp = new fileinputStream(file); hssfworkbook workbook = new hssfworkbook(inp); //ワークブック...トラバーサル操作}上記のコードは、excel2003(xls)のファイルを読み取ることが問題であることを示していますが、excel2007(xlsx)のファイルが読み取られると、例外が報告されます。
情報を確認した後、Excel 2007 ExcelファイルのバージョンをXSSFWorkBookを使用して読み取る必要があります。
public void Test(file file)throws ioexception {inputstream inp = new fileinputStream(file); XSSFWorkBook Workbook = new XSSFWorkBook(INP); //ワークブック...トラバーサル操作}注:XSSFWorkBookには、Poi-ooxml-3.9-sources.jarおよびpoi-ooxml-schemas-3.9.9.jarの追加のインポートが必要です。
このようにして、Excel2007のインポートに問題はありませんが、Excel2003のインポートには例外が報告されています。
したがって、Excelをインポートするときは、Excelのバージョンを判断し、さまざまな方法を呼び出すようにしてください。
ファイルサフィックス名を使用してタイプを決定することを考えましたが、誰かがXLSXの接尾辞をXLSに変更した場合、XLSX関数を使用して読み取る場合、結果はエラーです。接尾辞名は正しいですが、ファイルコンテンツエンコードなどは正しくありません。
最後に、HSSFWorkBookとXSSFWorkBookの両方がワークブックインターフェイスを実装するため、WorkbookFactory.Create(inputstream)を使用してワークブックを作成することをお勧めします。コードは次のとおりです。
ワークブックwb = workbookfactory.create(is);
ご想像のとおり、workbookfactory.create()関数では、ファイルタイプに判断が必要です。ソースコードがどのように裁判されるかを見てみましょう。
/ ** *指定されたinputstreamから適切なHSSFWORKBOOK / XSSFWORKBOOKを作成します。 *入力ストリームは、マーク/リセットをサポートするか、 * {@link pushbackinputStream}としてラップする必要があります。 */ public static Workbook create(inputstream inp)throws ioexception、nivalidformatexception {//明確にマーク/リセットを実行しない場合、if(!inp.marksupported()){inp = new bushbackinputStream(inp、8); } if(poifsfilesystem.haspoifsheader(inp)){return new hssfworkbook(inp); } if(poixmldocument.hasooxmlheader(inp)){return new xssfworkbook(opcpackage.open(inp)); }新しいIllegalargumentException(「入力ストリームはOLE2ストリームでもOOXMLストリームでもありませんでした」); }適切なワークブックオブジェクトがファイルタイプに従って個別に作成されていることがわかります。ファイルのヘッダー情報に基づいて判断されます。現時点では、接尾辞名が変更されたとしても、渡すことはできません。