Hssf poi

10 respostas
I

Boa tarde galera.
Estou usando o HSSF POI para gerar um relatório em Exel, e retornando ele pelo request da minha aplicação web.
Até ai tudo bem, o arquivo parece estar sendo gerado corretamete, salvo ele no meu desktop, quando vou abrir, o Exel 2003, diz que ele precisa ser reparado, e pergunta se eu quero ou não enviar relatório para Ms.
Dou não, e mando abrir novamente, e então o arquivo é reparado, e funciona.

Alguem saberia dizer se isto é da versão do Exel ou algo assim?
Se for da versão isto é critico, pois no cliente ninguém garante a versão…

Vejam o código que estou usando.

Chamada no action…

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

		String opcao = (String) PropertyUtils.getSimpleProperty(form, "opcao");

		ActionErrors errors = new ActionErrors();

		String codigoMarca = (String) PropertyUtils.getSimpleProperty(form, "codigoMarca");
		String codigoColecao = (String) PropertyUtils.getSimpleProperty(form, "codigoColecao");
		String codigoCategoria = (String) PropertyUtils.getSimpleProperty(form, "codigoCategoria");
		String codigoTipoConsulta = (String) PropertyUtils.getSimpleProperty(form, "codigoTipoConsulta");

		if (Constants.CONSULTAR.equals(opcao)) {
                                ...
                                ...
		} else if ("exportar".equals(opcao)) {
			ArrayList resultados = ((ConsultaEstatisticaDetalhadaForm) form).getResultados();
			if (resultados != null) {
				HSSFWorkbook wb = new ConsultarEstatisticaDetalhada().exportaEstatisticaDetalhadaAnaliticaXLS(resultados);
				response.setContentType("application/xls");
				response.setHeader("Content-Disposition", "attachment; filename=estatistica.xls");
				response.setHeader("Cache-Control", "false");
				response.setContentLength(wb.getBytes().length);
				ServletOutputStream outputStream = response.getOutputStream();
				outputStream.write(wb.getBytes());
				outputStream.flush();
				outputStream.close();
			}
		}

		return mapping.getInputForward();
	}

Geração do relatório

public HSSFWorkbook exportaEstatisticaDetalhadaAnaliticaXLS(ArrayList resultados) {
		HSSFWorkbook wb = new HSSFWorkbook();
		HSSFSheet sheet = wb.createSheet("Consulta Analítica");

		HSSFRow rowTitulo = sheet.createRow((short) 0);
		HSSFCell cellTitulo = rowTitulo.createCell((short) 0);

		cellTitulo.setCellValue("Estatisticas");

		HSSFCellStyle estilo = wb.createCellStyle();
		estilo.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		cellTitulo.setCellStyle(estilo);

		return wb;
	}

Obrigado!

10 Respostas

C

Tente dar um return null no Action… Numa dessas pode ser isso.

I

Não resolveu infelizmente ;/

C

hum. Posso ir na tentativa e erro?

HSSFSheet sheet = wb.createSheet("Consulta Analítica");

Tire os acentos.

Eu não sei, já criei tabelas MUUUUUUUUUITO mais complexas, pra excel 2003, e não tive problemas. Vou tentar achar o código.

I

Também pensei que fosse o acento, tirei antes mais não deu…

hehehe

C

Aqui tá assim (código legado)

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment" + ";fileName=\"" + fileName + " "  
                  + Utils.dateHourFormat.format(new Date()).replace('/', '-').replace(':', '\'') + ".xls\"");

wb.write(response.getOutputStream());
I

Fiz um teste com o código que você postou.
Agora quando abro o excel ocorre um erro mais bizarro ainda…

‘estatistica.xls’ não pode ser acessado. O arquivo pode ser para somente leitura ou você pode estar tentando acessar um local somente para leitura. Ou, o servidor no qual o documento está armazenado pode não estar respondendo.

Estranho mesmo.

Já fiz vários relatórios com o HSSF, mas nenhum baixando via servlet…
Sei la se é isto…
Não encontro nada parecido na internet…

C

Bom, não posso te ajudar mais. Mas sugiro a tentar isolar o problema.

Veja se salvando o arquivo em disco fica ok.

Veja se só acontece com este excel.

E por aí… boa sorte!

I

Sim, eu já estava fazendo bem isto que vc falou… tentar salvar direto em disco :wink:

Vamos ver oque é…
Brigadão!

V

insonix, estou com esse mesmo problema. Você encontrou alguma solução?

Vlw! :thumbup:

L

Eu estava com este erro também. Tente trocar

por

Criado 29 de abril de 2008
Ultima resposta 3 de jul. de 2008
Respostas 10
Participantes 4