2011-07-05 6 views
1

のApache POI HSSFを使用して、我々は、私がXSSFWorkbookでどのように書くことができ、同様にこのApache POI - XSSFWorkbookをPOIFSFileSystemに書き込む方法は?

private void write(HSSFWorkbook workbook) { 
    POIFSFileSystem filesystem = new POIFSFileSystem(); 
    filesystem.createDocument(new ByteArrayInputStream(workbook.getBytes()), 
        "Workbook"); 
    FileOutputStream stream = new FileOutputStream("test.xls"); 
    filesystem.writeFilesystem(stream); 
} 

などのXLSファイルを作成することができますか?これにはgetBytes()メソッドがありません。
私はこのようなXSSFWorkbookからByteArrayInputStreamを作成しようとしました -

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
workbook.write(baos); //XSSFWorkbook here 
ByteArrayInputStream bias = new ByteArrayInputStream(baos.toByteArray()); 

しかし、作成したXLSXファイルが壊れていました。 POIFSFileSystemを使用してワークブックをディスクに書き込むにはどうすればよいですか?私はこのようにやったとき

同じXSSFWorkbookがsucessfully書かれていた - 私はのxlsxファイルを抽出して比較すると

FileOutputStream stream = new FileOutputStream("test.xlsx"); 
workbook.write(stream); 

、差は認められませんでした。しかし、xlsxファイルでプレーンテキストを直接比較すると(抽出せずに)、バイト数にはほとんど違いがありません。

したがって、問題は、および/またはwriteFilesystem()の方法がPOIFSFileSystemである必要があります。誰かがPOIFSFileSystemを使用してXSSFWorkbookを書く方法を教えてもらえますか?

答えて

4

あなたはできません!

POIFSFileSystemは、.xls、.doc、.ppt、.msgなどのOLE2ファイルで動作します。POIFSコードは、その中の個々のストリームの読み書きを処理します。

OOXMLファイル(.xlsx、.docx、.pptxなど)では、ファイルのコンテナはOLE2でなくなりました。代わりに、ファイルはZipコンテナ内に格納されます。 POIでは、これはOPCPackageによって処理されます.OPCPackageは、Zipファイルから必要なOOXMLメタデータを読み書きします。

あなたがディスクにXSSFファイルを書き込みたい場合は、単に実行します。

FileOutputStream stream = new FileOutputStream("test.xlsx"); 
workbook.write(stream); 
stream.close(); 

そして、あなたはそれを実現するためにのためにXSSFWorkbookはOPCPackageと話して処理します。

関連する問題