我使用HSSFWorkbook生成了Excel电子表格,然后实现了自定义javax.activation.DataSource以将电子表格附加到电子邮件中。但是,在Excel中打开电子表格后,它会崩溃。 Excel可以恢复一些数据,但它会丢失大部分格式。
答案 0 :(得分:8)
在DataSource实现中返回InputStream时,请确保您没有使用HSSWorkbook.getBytes(),因为这只会返回电子表格的特定部分(不能单独使用),而不是整个文件。使用write()方法代替ByteArrayOuputStream。例如:
public InputStream getInputStream() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
return new ByteArrayInputStream(baos.toByteArray());
}
请注意电子表格的大小,因为这会在内存中发生。考虑存储电子表格,并使用常规FileDataSource附加它。
答案 1 :(得分:0)
我认为问题出在POI中,它不会生成可读的excel文件。