2015-11-13 7 views
6

XLSXファイルを開くためのクラスを見つけることができませんが、私はXLSXを読むためにソースにWorkbookFactoryXSSFWorkbookを見つけることができないのですファイル。Apacheのポイ3.13は、私が読んで、Javaので優れてファイルを書き込むためにApacheのPOIを使用しています

のpom.xml

<poi.version>3.13</poi.version> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>${poi.version}</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>${poi.version}</version> 
</dependency> 

私はこの動作につながる可能性のApache POIの変更履歴内の任意の情報でもないを見つけることができません。

編集: ここに私の実装(一瞬のためだけの簡単な方法)

public static HSSFSheet getXLSSheet(String fileName, int sheetIndex) throws IOException { 
    InputStream inputStream = new FileInputStream(fileName); 
    HSSFWorkbook workbook = new HSSFWorkbook(inputStream); 
    return workbook.getSheetAt(sheetIndex); 
} 

私はXLSXファイルを開こうとしましたが、私は2つの他のクラス(WorkbookFactoryまたはXSSFWorkbookを見つけることができないので、 )私はこのようなエラーが予想されました:

org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF) 

ありがとうございます。

答えて

3

まずアップ、私はWorkbookFactoryXSSFWorkbookクラスはPOI-OOXML 3.13瓶に含まれていることを保証することができます、documented on the POI site

$ unzip -l .m2/repository/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13.jar | grep WorkbookFactory 
    6041 2015-09-22 00:22 org/apache/poi/ss/usermodel/WorkbookFactory.class 

としてしかし、あなたが投稿した例外を明確にして、あなたのコードは、意志XLSXファイルでは動作しません。変更する必要があります。両方xlsxlsxファイルに対して動作します

import java.io.File; 
import org.apache.poi.ss.usermodel.*; 

public static Sheet getExcelSheet(String fileName, int sheetIndex) throws IOException { 
    File file = new File(fileName); 
    Workbook workbook = WorkbookFactory.create(file); 
    return workbook.getSheetAt(sheetIndex); 
} 

、および使用してより低いメモリになります:まあ、あまりにも、いくつかの他の問題のために...例えばDon't use an InputStream if you have a File

あなたのコードではなく、より多くのようにする必要があります入力ストリーム。限り、あなたはpoi-ooxml jarファイルに依存するMavenを伝えるよう、あなたは

+0

自動的に必要なすべての他の依存関係を取得します私はそれを動作させるつもりではなかったということを知っていました。しかし、それが3.13バージョンであることを確認していただきありがとうございます。 IDEにエラーがあり、依存関係がどのようにロードされていないのか分かりました。今はすべて正常に動作しています。私はInputStreamの代わりにFileにも変更しました(しかし、テストの目的で私は最速の方法を試みました) – Sqrt

0

XSSFWorkbookは、Apache POIの3.11バージョンで提示しています。

Source code of apache POI

のApache POIのこのバージョンを使用してみてください。

トランクでも、それはまだ存在:

Source code of apache POI

私は問題があなたのMavenのローカルストレージであると信じています。 mavenローカルリポジトリからpoi folederesを削除し、依存関係をredownloadしようとします。

またXLSXファイルのみXSSFWorkbookを経由して開きますので、HSSFWorkbookからXSSFWorkbookにすべてのコールを変更することを忘れないようにしてみてください。

関連する問題