A responsabilidade abrir o arquivo no browser ou fora dele ou de fazer o download é do browser, não sua (no servidor).
O máximo que você pode fazer é isso, seta o tipo da resposta pro browser, ai se ele tiver um plugin pra tratar o tipo de arquivo ele vai usa-lo, caso contrário vai pedir pra salvar.
Eu to gerando o arquivo usando a api jxl.
se eu tento abrir o arquivo gerado pelo excel 97, ele abre normal, o problema é quando vai abrir pelo browser.
dá erro do programa, do excel
“o programa gerou erros e será fechado. blá, blá”
Você gera e depois redireciona o browser pro arquivo .xls gerado? Se sim entonces seu excel de teste tá zicado.
Se não … então você gera o arquivo e cospe o conteúdo dele no browser usando o servlet … revise seu código pq ele não deve estar mandando o EOF ou alguma outra coisa mas que o 2000 consegue se virar e o 97 não.
Ai é que tá no servidor onde vc gera o aquivo excell, deve estar instalado o office 2000, um arquivo do office 2000 não abre no office 97 o contrario abre, mas o inverso não…
Hummm … a API não deve usar o excel instalado, nem precisaria do excel pra gerar o arquivo.
Tem alguma coisa no buffer antes do dispatch?
Tente dar um reset no response: Relatorio.produtos(categoria, marca, caminho);
url="/relatorios/relProdutos.xls";
response.reset(); //<-- AQUI
response.setContentType("application/vnd.ms-excel");
getServletContext().getRequestDispatcher(url).forward(request,response);
Se não funcionar … bem … não conheço as entranhas :shock: da API mas o foward deveria funcionar, usando o reset tente trocar por include.
Nem um errinho no output … exception … logzinho … qualquer coisinha?
Vamos recomeçar:
Ao visualizar seu servlet no micro com Excel97 o browser
a. Pergunta onde você quer salvar o arquivo
b. Abre o excel antes de baixar o arquivo
c. Baixa o arquivo sem perguntar nada e inicia o excel pra abrir o arquivo
d. M.N.D.A (m = merda, n = nenhuma, d = das, a = alternativas)
A próxima pergunta vem depois da resposta pra questão acima :lol:
Duas coisas que eu sugeriria seria o seguinte. Ao inves de dar o forward , que voce nao ira saber direito o que acontece por baixo dos panos (vai que ele reseta o content-type), voce pode abrir o arquivo excel e pegar o outputstream, e voce mesmo escrever os dados na saida do servlet.
Outra coisa que voce pode testar eh tentar um setar, alem do content-type, setar o content-length. Talvez o Excel 97 tenha que saber de antemao o tamanho do arquivo. Ja vi outras aplicacoes que precisam do content length setado na resposta.
Entonces faça um teste, mude o content-type para application/octet-stream
Isso deve forçar o download … salve o arquivo no seu hd e tente abri-lo.
Se funcionar é porque o excel97 é xarope e não consegue abrir direto como ele está tentando (talvez a dica ai de cima se setar o content-length ajude neste caso).
Se não funcionar é porque Tanque tá certo … você vai ter que abrir direto o arquivo ao invés de dar um foward (mas não pelo contet-type porque ele não muda já que o excel eh que tenta abrir o arquivo).
Você já testou colocar um arquivo do Excel em uma área pública e fazer um link direto para ele? Se abrir normalmente o erro é de java senão o erro é do Office.