• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Zeant

Asp.net + Excel

8 mensagens neste tópico

Boas Pessoal,

Alguém sabe como fazer:

1º- Abrir um livro excel existente no servidor

2º- Mandar dados para o livro de excel sem ser de uma datagrid ou assim

3º- Enviar para o browser para o cliente poder fazer o download

Já andei no google e só encontro exemplo de de exportar dados para excel, mas com datagrid ou assim, e isso para mim não funciona... :wallbash:  :wallbash:  :wallbash:

Cumprimentos,

zeant

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Eu à pouco implementei para mim uma solução semelhante mas no meu caso era para abrir um ficheiro pdf. Mas não te preocupes que o método é suficientemente genérico para abrir qualquer tipo de ficheiro (julgo eu... :ipool:).

public static void obterPDF(string nomeFicheiroPDF, string caminhoFicheiroPDF)
        {
            // concatenar o caminho e o nome do ficheiro
            String sFullPath = String.Empty;
            sFullPath = caminhoFicheiroPDF + nomeFicheiroPDF;

            HttpContext context = HttpContext.Current;

            if (sFullPath != null && sFullPath.Length > 4)
            {
                if (sFullPath.Contains(@"\"))
                {
                    try
                    {
                        FileInfo _fileInfo = new FileInfo(sFullPath);
                        if (_fileInfo.Exists)
                        {
                            // Clear the whatever
                            context.Response.Buffer = false;
                            context.Response.Clear();
                            String sContentType = "";
                            // Determine the content type
                            switch (_fileInfo.Extension.ToLower())
                            {
                                case ".dwf":
                                    sContentType = "Application/x-dwf";
                                    break;
                                case ".pdf":
                                    sContentType = "Application/pdf";
                                    break;
                                case ".doc":
                                    sContentType = "Application/vnd.ms-word";
                                    break;
                                case ".ppt":
                                case ".pps":
                                    sContentType = "Application/vnd.ms-powerpoint";
                                    break;
                                case ".xls":
                                    sContentType = "Application/vnd.ms-excel";
                                    break;
                                default:
                                    sContentType = "Application/octet-stream";
                                    break;
                            }

                            context.Response.AddHeader("Content-Disposition", "attachment=" + _fileInfo.Name);
                            context.Response.AddHeader("Content-Length", _fileInfo.Length.ToString());
                            // Set the content type
                            context.Response.ContentType = sContentType;
                            // Write the file to the browser sFullPath
                            context.Response.WriteFile(sFullPath);

                            // adicionada posteriormente
                            context.Response.End();
                        }
                    }

                    catch
                    {}
                }
            }
        }

Espero ter ajudado!

Cumps!

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu recomendo uma solução diferente:

Criar uma string com código html com o conteudo que queres por no excel. Enviar uma stream com esse conteudo e com o content type xls.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

skcratch, o teu codigo é bom so que não é bem o que eu quero...  :D

bruno1234, sera que me podes explicar essa tua solução melhor?É que pelo que me parece isso é o que ando a procura, mas como os meus conhecimentos em Asp.net sao muito poucos(estou a começar agora), perciso de explicação melhor  :)

Porque o que eu perciso mesmo é que o asp.net abra um livro excel e que passe os dados que o utilizador introduzio na pagina para o excel, só depois é que permite o download do ficheiro ao utilizador... :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crias uma string html:

string html = "<html> .... </html>"

depois alteras o response:

Response.Clear();

Response.AddHeader("Content-Disposition", String.Format("inline; filename=\"{0}.xls\"", nomeFicheiro));

Response.ContentType = "application/vnd.ms-excel";

Response.ContentEncoding = System.Text.Encoding.Default;

Response.Charset = String.Empty;

e envias:

Response.Write(html);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas bruno1234,

O teu código resolve-me o problema de escrever no livro de excel, mas continuo com o problema de não poder escrever no livro já existente.  :wallbash:

Eu tentei fazer um:

Response.TransmitFile(caminhoDoFicheiro)

só que depois o Response.Write(html), não escreve dentro desse ficheiro.....

Claro que não estou a fazer bem :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, o q estás a fazer é errado.

Numa aplicação web tu envias um ficheiro por stream para um pc remoto.

E como o ficheiro ficou num pc remoto, já n tens acesso a ele, n podes acrescentar coisas numa localização a q n podes aceder.

Se queres acrescentar coisas ao ficheiro, primeiro gera tudo o q precisas enviar, e só no fim, qd o ficheiro tiver completo é q envias p o cliente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Eu resolvi o problema assim :

   Dim conn1 As New OleDbConnection(m_sConn1)
            conn1.Open()
            Response.Write(conn1.State)
            Dim cmd As New System.Data.OleDb.OleDbCommand()
            cmd.Connection = conn1
            cmd.CommandText = "INSERT INTO [Folha1$] (Nome,Empresa,Area) values ('CCC', 'Charlie', '10/14/48')"
            cmd.ExecuteNonQuery()
            cmd.CommandText = "INSERT INTO [Folha1$] (Nome,Empresa,Area) values ('DDD', 'Deloris', '7/19/98')"
            cmd.ExecuteNonQuery()
            conn1.Close()

            Response.Clear()
            Response.AddHeader("content-disposition", "attachment;filename=FileName.xls")
            Response.Charset = ""
            Response.ContentType = "application/vnd.xls"
            Response.TransmitFile("E:\site\L41222.xls")

A única coisa que tem que ter atenção é que onde diz "Nome","Empresa","Area", isso tem que estar escrito por exemplo na célula A1,B1,C1 se não o código não funciona...Depois de inserir os dados é só fazer o download do ficheiro, o código mostra  :cheesygrin:

Cumps,

zeant

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora