HSSFWorkbook problema na geração de arquivo .xls

5 respostas
Pedro_Java

Eu não to usando o FileInputStream nem o FileOutputStream, minha aplicação funciona da seguinte forma, eu instancio um HSSFWorkbook crio as linhas, depois preencho as celulas e coloco meu estilo na celula, ai para gerar o download do execel eu uso essa linha de comando:

response.setHeader("Content-Disposition", "attachment;filename=\"bugCST.xls\"");

		response.setHeader("Pragma", "public");
		response.setHeader("Cache-Control", "cache");
		response.setHeader("Cache-Control", "must-revalidate");
		response.setContentType("application/xls"); 
		response.setContentLength(workbook.getBytes().length);
		

		OutputStream out = response.getOutputStream();
		out.write(workbook.getBytes(), 0, workbook.getBytes().length);
		out.flush();
		out.close();

Ele abre aquela caixa de download normal, quando eu peço para abrir, aparece esse erro: “Informações de resumo do documento perdidas” , ai o excel fala que conseguiu recuperar o arquivo e abre normalmente, alguem poderia me falar o que poderia esta causando esse erro, no open office funciona corretamente!

5 Respostas

von.juliano

Ao invés de fazer assim:

OutputStream out = response.getOutputStream(); out.write(workbook.getBytes(), 0, workbook.getBytes().length); Faça assim:

workbook.write(response.getOutputStream());Vê se funciona.

E lembre-se de sempre utilizar as tags [ CODE ]

Flw! :thumbup:

Pedro_Java

juliano eu coloquei desse jeito :

response.setHeader("Content-Disposition", "attachment;filename=\"bugCST.xls\"");
			response.setHeader("Pragma", "public");
			response.setHeader("Cache-Control", "cache");
			response.setHeader("Cache-Control", "must-revalidate");
			response.setContentType("application/xls"); 
			response.setContentLength(workbook.getBytes().length);
			

			workbook.write(response.getOutputStream());
			response.getOutputStream().flush();
			response.getOutputStream().close();

Ele abre normalmente a caixa de download só que quando vai abrir fala que o arquivo não pode ser acessado. Ele falou ou porque o arquivo é somente leitura ou o servidor não esta respondendo, mas ele gera um arquivo com os bytes que eu informei e com o nome. eu tentei tambem sem colocar o flush, e tentei sem colocar o close referente as ultimas linhas do codigo

von.juliano
Eu tenho algo parecido aqui funcionando normalmente, tá assim:
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=Report.xls");

workbook.write(response.getOutputStream());
response.getOutputStream().flush();
Vê se isso resolve. Se não resolver, pode ser algum erro na criação do workbook.

Flw! :thumbup:

Pedro_Java

Agora deu certo valeu Juliano :smiley:

D

Acho que o segredo estava nessa linha:

response.setContentType("application/vnd.ms-excel");

e não nessa:

response.setContentType("application/xls");
Criado 30 de julho de 2008
Ultima resposta 3 de jan. de 2011
Respostas 5
Participantes 3