При возврате InputStream в реализации DataSource убедитесь, что вы не используете HSSWorkbook.getBytes (), поскольку при этом будет возвращена только определенная часть электронной таблицы (которую нельзя использовать отдельно), а не весь файл. Вместо этого используйте метод write () с ByteArrayOuputStream. Например:
public InputStream getInputStream() throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
return new ByteArrayInputStream(baos.toByteArray());
}
Просто будьте осторожны с размером таблицы, так как это происходит в памяти. Попробуйте вместо этого сохранить электронную таблицу и прикрепить ее с помощью обычного FileDataSource.
HSSFWorkbook.getBytes ()