Excel no Browser

Olá

Tenho um servlet q redireciona para um arquivo excel, q deve abrir pelo browser.

como faria isso?

eu usei:

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

o problema é que só funciona em máquinas com offie 2000
como faço para abir em máquinas com office 97?

Não faz.

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.

tudo bem

mas como eu faço isso?

quando é office 2000, ele mostra, mas quando é office 97, ele tenta abrir e dá erro

não deveria baixar o arquivo, já que não consegue abrir?

Hummmm … vamos revisar.

Mesmo código gerando o arquivo excel, mesmo arquivo excel … mesmo tudo e só abre no 2000?

Será que o arquivo não tem formato de 2000 e o Excel 97 não consegue abrir?

Diga a msg de erro, quando e como acontece … ai dá pra chutar melhor.

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á”

assim fica complicado chutar.

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.

A minha classe Relatorio gera o arquivo do excel, depois eu abro desse jeito:

Relatorio.produtos(categoria, marca, caminho); url="/relatorios/relProdutos.xls"; response.setContentType("application/vnd.ms-excel"); getServletContext().getRequestDispatcher(url).forward(request,response);

o erro pode estar ai?

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…

No servidor está instalado o office 97

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.

smota

obrigado,
mas tentei dar reset no response
tb troquei forward por include, e naum dá certo :frowning:

eitcha … to quase indo ai hein :changes:

Nem um errinho no output … exception … logzinho … qualquer coisinha?

Vamos recomeçar:

  1. 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.

smota

ele baixa o arquivo, mas quando vai abrir q dá erro no excel.exe

ele nem pergunta se quer salvar

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.

usando o application/octet-stream e o content-length ele ta baixando o arquivo, entaum tudo bem

obrigado a todos

só q ele aparece pra salvar como o nome do meu servlet
tem como eu fazer para aparecer o nome do arquivo .xls?

Para “sugerir” um nome alternativo para o browser precisa mudar outro header da resposta: o content-disposition:

Content-Disposition: attachment; filename=arquivo.xls

Esse header parece que tem umas variacoes entre o IE 5, 5.5. Eh bom dar uma verificada.

Obrigado a todos

agora já está tudo funcionando. :smiley:

ufa :drinking: