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

joven

Excel e C#

9 mensagens neste tópico

Boas

Alguém sabe como posso abrir um ficheiro *.xls e escrever nas celulas?

fiquem bem

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já precisei de fazer algo parecido, e a melhor solução que encontrei foi gravar no formato CSV. Não dá para gravar gráficos, imagens, etc, apenas caracteres.

Além disso também só permite uma única folha de cálculo.

As colunas ficam separadas por ;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É fácil, cria uma folha de cálculo, escreve lá algumas coisas em algumas células e faz Save As... e escolhes o formato CSV.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas

já encontrei a maneira de fazer o que queria e utilizei  o seguinte código como base.

public class CsvWriter
{
        public static string WriteToString(DataTable table, bool header, bool quoteall)
        {
                StringWriter writer = new StringWriter();
                WriteToStream(writer, table, header, quoteall);
                return writer.ToString();
        }

        public static void WriteToStream(TextWriter stream, DataTable table, bool header, bool quoteall)
        {
                if (header)
                {
                        for (int i = 0; i < table.Columns.Count; i++)
                        {
                                WriteItem(stream, table.Columns[i].Caption, quoteall);
                                if (i < table.Columns.Count - 1)
                                        stream.Write(',');
                                else
                                        stream.Write('\n');
                        }
                }
                foreach (DataRow row in table.Rows)
                {
                        for (int i = 0; i < table.Columns.Count; i++)
                        {
                                WriteItem(stream, row[i], quoteall);
                                if (i < table.Columns.Count - 1)
                                        stream.Write(',');
                                else
                                        stream.Write('\n');
                        }
                }
        }

        private static void WriteItem(TextWriter stream, object item, bool quoteall)
        {
                if (item == null)
                        return;
                string s = item.ToString();
                if (quoteall || s.IndexOfAny("\",\x0A\x0D".ToCharArray()) > -1)
                        stream.Write("\"" + s.Replace("\"", "\"\"") + "\"");
                else
                        stream.Write(s);
        }
}

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu faço isso com automatização Excel, mas depende do objectivo do programa.

É possível abrir o excel, escrever para as células, criar gráficos, etc., tudo através de código. Na verdade é possível usar quaqluer aplicação MS Office através de código. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia do programa é receber os dados (por usb) e apresentar numa datagridiew.

A ideia era exportar os valores do datagridview para um ficheiro exel para feturamente trata-los.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A automatização tem vantagens que a simples exportação para CSV não permite mas tem um problema muito grande. As bibliotecas de interoperabilidade, que permitem controlar o as aplicações MS Office, são especificas para uma versão do MS Office, por exemplo, uma aplicação feita com as ferramentas interop do Office XP não vai funcionar se o PC tiver outra versão do Office.

Dado que não dizes que tratamento é, assumo que podes passar bem com a importação de ficheiros CSV, assim acho que a opção que Saco te deu é a que menos problemas acarreta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A automatização tem vantagens que a simples exportação para CSV não permite mas tem um problema muito grande. As bibliotecas de interoperabilidade, que permitem controlar o as aplicações MS Office, são especificas para uma versão do MS Office, por exemplo, uma aplicação feita com as ferramentas interop do Office XP não vai funcionar se o PC tiver outra versão do Office.

Dado que não dizes que tratamento é, assumo que podes passar bem com a importação de ficheiros CSV, assim acho que a opção que Saco te deu é a que menos problemas acarreta.

Já fiz isso muita vez, usando Python e COM, e nunca tive problemas com as versões do Office...

As maiores desvantagens é que o Office tem de estar instalado na máquina e o utilizador não pode usar o Excel, uma vez que a aplicação toma conta do Excel.

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