web-dev-qa-db-ja.com

POI HSSFWorkbookをバイトに変換するにはどうすればよいですか?

Simpleの呼び出し toBytes() はバイトを生成しますが、exelは警告をスローします。

失われた文書情報

周りをグーグルで検索して、この linkJavadocs ワークシートとPOIを見て HOW-TO 似たようなことを言ってください。基本的に、情報を失うことなくBytesを取得することはできません。代わりにwriteメソッドを使用する必要があります。

書き込みは正常に動作しますが、実際にバイトを送信する必要があります。それを行う方法はありますか?これは、警告を出さずにバイトを取得することです。

32
Shahzeb

そのメーリングリストの投稿が言ったように

HSSFWorkbook.getBytes() を呼び出しても、完全なExcelファイルを再構築するために必要なすべてのデータが返されるわけではありません。

ByteArrayOutputStream を指定してwriteメソッドを使用すると、バイト配列を取得できます。

ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
    workbook.write(bos);
} finally {
    bos.close();
}
byte[] bytes = bos.toByteArray();

close呼び出しはByteArrayOutputStreamには実際には必要ありませんが、後で別の種類のストリームに変更された場合に備えて含めるのが良いスタイルです。)

73
Jörn Horstmann

どうですか:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
byte[] xls = baos.toByteArray();

Excelファイル全体を取得するには、write(OutputStream)メソッドを呼び出す必要があります。それからバイトが必要な場合は、ByteArrayOutputStreamを与えるだけです

15
Gagravarr