Shahzeb
Shahzeb

Reputation: 4785

How can I convert POI HSSFWorkbook to bytes?

Calling Simple toBytes() does produce the bytes, but Excel throws Warning.

Lost Document information

Googling around gave me this link and looking at Javadocs for worksheet and POI HOW-TO say similar things. Basically, I cannot get Bytes without losing some information and should use the write method instead.

While write does work fine, I really need to send the bytes over. Is there any way I can do that? That is, get the bytes without getting any warning.

Upvotes: 60

Views: 96557

Answers (2)

Gagravarr
Gagravarr

Reputation: 48356

How about:

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

In order to get a full excel file out, you must call the write(OutputStream) method. If you want bytes from that, just give a ByteArrayOutputStream

Upvotes: 23

Jörn Horstmann
Jörn Horstmann

Reputation: 34034

As that mailing list post said

Invoking HSSFWorkbook.getBytes() does not return all of the data necessary to re- construct a complete Excel file.

You can use the write method with a ByteArrayOutputStream to get at the byte array.

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

(The close call is not really needed for a ByteArrayOutputStream, but imho it is good style to include anyway in case its later changed to a different kind of stream.)

Upvotes: 126

Related Questions