1

Workbook オブジェクトを初期化しようとすると、常に次のエラーが発生します。

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)

しかし、私はオフィスのサンプルに従ってこれを行いました.以下は私のコードです:

File inputFile = new File(inputFileName); 
InputStream is = new FileInputStream(inputFile);
Workbook wb = new XSSFWorkbook(is);

コード行で例外が発生します:

Workbook wb = new XSSFWorkbook(is);

以下を含む POI jar を次に示します。

poi-3.8-20120326.jar  
poi-ooxml-3.8-20120326.jar  
poi-ooxml-schemas-3.8-20120326.jar  
xmlbeans-2.3.0.jar  

誰でも私に指導を与えることができますか?完全な Excel 2007 ドキュメントを読み取る方法を示す例を示していただければ幸いです。前もって感謝します!

4

1 に答える 1

4

元のファイルが実際に Office 2007+XML 形式であることを再確認したと思いますよね?

編集:

次に、形式が問題なく、WorkbookFactory.create を使用して機能することが確実な場合は、そのようなメソッドのコードで答えを見つけることができます。

   /**
     * Creates the appropriate HSSFWorkbook / XSSFWorkbook from
     *  the given InputStream.
     * Your input stream MUST either support mark/reset, or
     *  be wrapped as a {@link PushbackInputStream}!
     */
    public static Workbook create(InputStream inp) throws IOException, InvalidFormatException {
            // If clearly doesn't do mark/reset, wrap up
            if(! inp.markSupported()) {
                    inp = new PushbackInputStream(inp, 8);
            }

            if(POIFSFileSystem.hasPOIFSHeader(inp)) {
                    return new HSSFWorkbook(inp);
            }
            if(POIXMLDocument.hasOOXMLHeader(inp)) {
                    return new XSSFWorkbook(OPCPackage.open(inp));
            }
            throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
    }

これはあなたが見逃していたビットです:new XSSFWorkbook(OPCPackage.open(inp))

于 2012-09-26T02:37:03.553 に答える