Boa tarde galera.
Estou criando uma planilha excel usando o HSSF do POI.
Quando gero a planilha para um outputstream no disco, ela é gerada corretamente.
Quando gero ela, e mando para o ServletOutputStream, quando eu vou abrir ela no excel, ocorre um erro dizendo que o arquivo precisa ser recuperado.
Procurei alguma coisa no google, tem mais pessoas que tiveram este problema, mas não tive exito em achar uma solução até agora.
Abaixo o código que estou usando para gerar o output para o disco (funciona).
ArrayList resultados = ((ConsultaEstatisticaDetalhadaForm) form).getResultados();
if (resultados != null) {
HSSFWorkbook wb = null;
if (codigoTipoConsulta != null && codigoTipoConsulta.equalsIgnoreCase("a")) {
wb = new ConsultarEstatisticaDetalhada().exportaEstatisticaDetalhadaAnaliticaXLS(resultados);
} else if (codigoTipoConsulta != null && codigoTipoConsulta.equalsIgnoreCase("s")) {
wb = new ConsultarEstatisticaDetalhada().exportaEstatisticaDetalhadaSinteticaXLS(resultados);
}
if (wb != null) {
File fTemp = new File("C:\\temp.xls");
FileOutputStream fOutTemp = new FileOutputStream(fTemp);
wb.write(fOutTemp);
fOutTemp.close();
...
...
...
}
}
Abaixo quando gero saída para o ServletOutputStream (ocorre erro ao abrir o .xls)
ArrayList resultados = ((ConsultaEstatisticaDetalhadaForm) form).getResultados();
if (resultados != null) {
HSSFWorkbook wb = null;
if (codigoTipoConsulta != null && codigoTipoConsulta.equalsIgnoreCase("a")) {
wb = new ConsultarEstatisticaDetalhada().exportaEstatisticaDetalhadaAnaliticaXLS(resultados);
} else if (codigoTipoConsulta != null && codigoTipoConsulta.equalsIgnoreCase("s")) {
wb = new ConsultarEstatisticaDetalhada().exportaEstatisticaDetalhadaSinteticaXLS(resultados);
}
if (wb != null) {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=estatistica.xls");
response.setHeader("Cache-Control", "false");
response.setContentLength(wb.getBytes().length);
ServletOutputStream outputStream = response.getOutputStream();
wb.write(outputStream);
outputStream.flush();
outputStream.close();
}
return null;
}
Alguem já passou por esta situação ou teria uma dica de como eu poderia resolver o problema?
Att. Diego.