none
Problema com para abrir Excel na WEB RRS feed

  • Pergunta

  • Boas senhores, uso vs2010 c#

    Já procurei no fórum, na internet, mas ainda nada...

    Em uma aplicação web tenho que fazer uma consulta no banco e gerar o resultado em um arquivo Excel.

    Sem problemas, usando interop fiz isso....fiz o acesso , criei o Excel, quando termina o processo ao fechar a planilha ele pergunta se quero salvar através do próprio navegador....

    Perfeito....

    MAS quando jogo isso para o servidor ....nada acontece.....

    Alguém faz isso e conseguiu resolver ? Como salvar este arquivo no cliente ?

    Obrigado

    segunda-feira, 30 de setembro de 2013 22:14

Todas as Respostas

  • Não sei se entendi corretamente

    1) - As aplicações web quando salvam arquivos irão salvar no diretório da aplicação você gostaria de salvar em outro diretorio correto ? Teria também que verificar se seu diretório tem permissão para salvar arquivos.

    2) - Aqui tem uma dica
    http://www.linhadecodigo.com.br/ArtigoImpressao.aspx?id=1496

    Espero ter ajudado


    Junior

    segunda-feira, 30 de setembro de 2013 22:24
  • Obrigado pelo retorno jr...

    Na verdade tenho que gerar um excel em tempo de execução e deixar o usuário salvar onde quiser...

    Criei o excel e salvo, mas so funciona na minha maquina...guando subo para homologação ele não abre a tela para salvar, pois acho que fica no servidor.

    Usando seu link, fiz um ajuste para salvar o arquivo em um lugar no servidor e depois fiz a chamada igual ao exemplo e tb não abre a tela para salvar....

    terça-feira, 1 de outubro de 2013 03:03
  • Em vez de salvar no servidor, no metodo retorne um bytearray do tipo excel que o navegador se encarrega de entender o retorno e abre a tela para o usuário salvar.

    Ex:.

    Response.Clear();
        Response.AddHeader("content-disposition", "attachment;  filename=file.xlsx");
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";                    
        Response.BinaryWrite(pck.GetAsByteArray());
        Response.End();

    terça-feira, 1 de outubro de 2013 21:56
  • Ola Rafael

    segue fragmento do meu código...

    Onde colocaria o Código que vc passou ? O que seria o pkc...para o meu caso ?


            private void GeraExcel3()
            {
                try
                {
    
                    Excel.Application ExcelApp = new Excel.Application();
                    Excel.Workbook wkbook;
    
                    Excel.Worksheet wksheet;
                    ExcelApp.Visible = false;
    
                    wkbook = ExcelApp.Workbooks.Add(Type.Missing);
                    wksheet = wkbook.ActiveSheet;
    
                    Int16 viLinha = 1;
                    Int16 viColuna = 1;
                    while (voSqlDr.Read())
                    {
                        for (int i = 0; i < voSqlDr.GetSchemaTable().Columns.Count; i++)
                        {
                            if (viLinha == 1)
                            {
                                wksheet.Cells[viLinha, viColuna].value = voSqlDr.GetName(i);//cab;
                                if (i + 1 == voSqlDr.GetSchemaTable().Columns.Count)
                                {
                                    i = -1;
                                    viColuna = 0;
                                    viLinha++;
                                }
                            }
                            else
                                wksheet.Cells[viLinha, viColuna].value = voSqlDr.GetSqlValue(i).ToString();
                            viColuna++;
                        }
                        viLinha++;
                        viColuna = 1;
                    }
    
                    wksheet = null;
                    wkbook = null;
                    ExcelApp.Quit();
                    ExcelApp = null;
                }
                finally { }
            }

    Obrigado

    quarta-feira, 2 de outubro de 2013 13:47
  • A Microsoft não recomenda o uso de interop com Excel via IIS.

    Já vi o Excel travar processo no servidor diversas vezes e isso dá um xabu danado na aplicação e no App Pool.

    Se você estiver em um plano de hospedagem, provavelmente nem consiga instanciar o Excel.

    Existem algumas ferramentas de mercado para manipular excel. Dá uma olhada nessa http://www.aspose.com/

    Se tiver mesmo que usar o Interop, cuidado com os possíveis efeitos colaterais.

    quarta-feira, 2 de outubro de 2013 13:55
  • Ucha, no projeto já tenho o telerik. Outro componente externo não será possível.

    Mas não tenho ainda todo o amb. de desenvolvimento do telerik, estou tentando arrumar a dll de design.

    Senhores estou tentando outra forma...mas ja vi que na pagina tem alguma coisa inibindo.

    Ex. 

    Fiz um botão usando o exemplo deste link - http://www.macoratti.net/10/05/c_dtxls.htm

    Não funciona nem em desenvolvimento.

    Criei um projeto novo, e joguei este mesmo código e funcionou.

    Duvidas:

    1- Como o projeto esta usando o telerik, será que inibe alguma coisa onde não deixar abrir a tela de dialogo do navegador?

    Editando a a tempo...uma parte da tela que estou mexendo tem um tal de <telerik:RadMultiPage , acredito que seja igual ao updatepainel....coloquei o botão fora e ai o arquivo é gerado....então para quem manja de telerik, como fazer funcionar dentro de componente.? 

    2 - O arquivo xls gerado ao abrir mostra uma msg falando que esta fora do padrão, mas vc clica em sim e ele abre...O que ocorre?

    Obrigado


    • Editado DET1 quarta-feira, 2 de outubro de 2013 18:52 ajuste
    quarta-feira, 2 de outubro de 2013 18:28