Reputation: 4785
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
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
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