打开附加到电子邮件的HSSFWorkbook生成的Excel工作表时Excel崩溃

我已经使用HSSFWorkbook生成了Excel电子表格,然后实现了一个自定义的javax.activation.DataSource来将电子表格附加到电子邮件中。 但是,在Excel中打开电子表格时,会崩溃。 Excel可以恢复一些数据,但是会丢失大部分的格式。

在DataSource实现中返回InputStream时,请确保没有使用HSSWorkbook.getBytes(),因为这将只返回电子表格的特定部分(不能单独使用),而不是整个文件。 使用write()方法而不是ByteArrayOuputStream。 例如:

public InputStream getInputStream() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); workbook.write(baos); return new ByteArrayInputStream(baos.toByteArray()); } 

只是谨慎的电子表格的大小,因为这是发生在内存中。 考虑存储电子表格,并使用常规的FileDataSource附加。

HSSFWorkbook.getBytes()

我认为这个问题出现在POI中,它不会生成可读的excel文件。