2016-07-07 41 views
2

私はいくつかのデータを分析するためのアプリケーションを作成しており、その結果をExcelファイルで提示する必要があります。その意味で私はApache POI(3.11)を使い始めました。いくつかのレポートは再生に多くの時間とメモリを消費するため、私は調査を行い、いくつかのテストが解決策だと思った後にjxlsを見つけました。しかし今、私は問題を発見しました。両方のフレームワークを一緒に動かすことはできません。jxlsとapache poiを一緒に使用できますか?

  1. 私は、問題ありません、私はjxlsと私のテストを行うために、余分なパッケージを作っjxls-2.3.0
  2. で動作するためには、3.11から3.14へのApache POIを更新する必要が
  3. Apache POIからjxlsに自分のクラスの1つを移行しようとしましたが、私はこのエラーを受け取りました:java.lang.IllegalStateException: Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath。これは私のメソッドのコードです:

    これを可能にする方法を
    private void prepareNewReport(File excelFile) { 
        List perforaciones = makePerforacionReport 
                  .makePerforacionData(escenario); 
    
    
    try (InputStream is = ReportePerforacionTotalDialog.class 
           .getResourceAsStream("PerforacionTotal_template.xls")){ 
        try (OutputStream os = new FileOutputStream(excelFile)) { 
         Context context = new Context(); 
         context.putVar("perforaciones", perforaciones); 
         JxlsHelper.getInstance().processTemplate(is, os, context); 
         LOGGER.logger.log(Level.INFO, "Archivo de perfortacion generado con éxito"); 
        } 
    } catch (IOException e) { 
        LOGGER.logger.log(Level.SEVERE, "Problemas buscando el archivo", e); 
    } 
    
    }

?。私はテストクラスを持っている同じプロジェクトで、別のパッケージとそのうまくいっている。ご覧のとおり、jxlsページの例とあまり違いはなく、インポートも同じです。私は私のプロジェクトのクリーン&ビルドを作るしようとしたとき

しかし、たとえ最悪の、そして私は、この他のエラーを得た:

java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: class file for org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes.CTArray not found 

私はjxlsとApacheを使用するために、私はimportedeすべてのライブラリを見てpoi、そしてそれは厳しいものです、そのクラスはそこにはありません。これら2つのフレームウォークの間に矛盾があるかどうかを見るために、jxlsを使用するために必要なすべてのライブラリをクラスパスから削除しました。クリーン&ビルド、問題ではない、私は自分の顧客に送信する私の.jarファイルが、不完全です。

Apache POIを使用するすべてのクラスを置き換えようとする可能性がありますが、それはPOIをプロジェクトで使用してデータを何度も読み込んだり、別の多くのファイルを書き込んだりするためです。私は使用テンプレートを利用するためにjxlsを使う予定でした。

私は何か助けや提案をお礼します。

答えて

2

最初のエラーでは、アプリケーションを実行しているときにクラスパスにApache POI用のJXLSトランスフォーマーが存在しないように見えます。ここに始めた情報を取得JXLSを確認してください:あなたはMavenを使用している場合http://jxls.sourceforge.net/getting_started.html

As it is explained in Transformers section (see Main Concepts)) Jxls core module does not depend on any specific Java-Excel library and works with Excel exclusively through a predefined interface. Currently Jxls supplies two implementations of this interface in separate modules based on the well-known Apache POI and Java Excel API libraries.

は、あなたのpom.xmlに含めるようにしてくださいJXLSに記載されているjxls-ポイ依存性が入門ページ:

<dependency> 
    <groupId>org.jxls</groupId> 
    <artifactId>jxls-poi</artifactId> 
    <version>1.0.9</version> 
</dependency> 

2番目の問題では、org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes.CTArrayは3.11(poi-ooxml-schemas-3.11-20141221.jar)または3.14(poi-ooxml-schemas-3.14-20160307.jar)のApache POI ooxmlスキーマjarファイルにありません。 POIは削除されたooxmlスキーマクラスのセットを使用するので、ooxmlスキーマをhttp://central.maven.org/maven2/org/apache/poi/ooxml-schemas/1.3/から完全に取得する必要があります。または、Maven(または別のビルドツール)を使用している場合は、ビルドの依存関係をhttps://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas/1.3

Mavenのために:

<!-- https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas --> 
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>ooxml-schemas</artifactId> 
    <version>1.3</version> 
</dependency> 

は、あなたのMaven POMからPOI-OOXML-スキーマの依存関係を削除してください。上記のooxml-schemasが優先されるようにします。

+0

私はFinbarr O'Bが私に語った。私は彼の勧告で2番目の問題を解決しましたが、私が最後に行ったインポートはooxml.schemas-1.1.jar、1.3でした。これはCTArrayクラスを含んでいないと思います。しかし、重要なのは最初のエラーで、実際の問題はgetResourcesAsStream()メソッドがファイルを見つけられなかったことですが、報告されたエラーは誤っていました。 –

関連する問題