none
ALTERAR DATATYPE EXCEL RRS feed

  • Pergunta

  • Boa Noite, estou querendo ajuda de vc's para resolver um negócio aqui Smile

    Tenho um arquivo excel, ao importar ele para o datagridview, percebi que algumas colunas aparecer no datagridview e outras não, descobri que é por causa do DATATYPE...parece que ele não importa dados do tipo System.String não sei...

    bem..lá estou eu tentando converter desta forma

                            ds.Tables[0].Columns[5].DataType = System.Type.GetType("System.Double");
                            ds.Tables[0].Columns[3].DataType = System.Type.GetType("System.DateTime");

    e ele me emite um erro bem claro

    NÃO É POSSÍVEL ALTERAR UM DATATYPE DE UMA COLUNA COM DADOS...

    Bem...eu preciso alterar..como faço agora ? Valeuuuuuuuu
    terça-feira, 30 de setembro de 2008 01:48

Todas as Respostas

  • Olá Renyo,

     

    Você só pode definir o DataType de uma coluna no momento da criação da mesma...

    Você está criando as colunas manualmente?

     

    Mostre como você está fazendo para importar (código), e se possível, disponibilize um exemplo do arquivo Excel em algum site (Rapidshare, por ex.) para podermos reproduzir o erro.

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    terça-feira, 30 de setembro de 2008 10:24
    Moderador
  • Caio, primeiramente obrigado pela atenção.

    Não, eu não estou criando as colunas dinamicamente, é um arquivo xls que "jogo" para o DataGridView, da seguinte forma

                sConexao = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
                           @"Data Source=" + txtFile.Text + ";" +
                           @"Extended Properties=" + Convert.ToChar(34).ToString() +
                           @"Excel 8.0;HDR=YES" + Convert.ToChar(34).ToString();
     
                OleDbConnection conexao = new OleDbConnection(sConexao);
     
                try
                {
                    conexao.Open();
                    OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM ["+txtSheet.Text+"$]", conexao);
                    OleDbDataAdapter da = new OleDbDataAdapter();
     
                    da.SelectCommand = cmd; 
     
                    DataSet ds = new DataSet();
     
                    da.Fill(ds);

    Como você pode ver, é um código bem simples, as colunas, informações, tudo é jogado para o Ds, que por sua vez, uso ele para popular meu DataGridView, o problema é que algumas colunas não aparecem seus respectivos dados, os cabeçalhos sempre aparecem, mas seus dados alguns não...exemplo:

    Nome | Idade |  Rua | Celular
    José                            8899
    Norma                        
    1129
    Neusa                         7819

    E no meu arquivo excel, há dados correspondente a Idade e Rua !

    Descobri que tenho que converter o dataType das colunas do meu DS, mas o compilados me diz que não posso porque, meu Ds já contêm dados,,,

    Espero ter esclarecido...

    OBRIGADO!

    terça-feira, 30 de setembro de 2008 16:53
  • Olá Renyo,

     

    Pelo visto, os campos Idade e Rua não estão sendo interpretados como String pelo Excel... O campo Idade até faz sentido, já que tem um número nas células (provavelmente está sendo criado como Double no seu DataTable), mas o campo Rua é estranho não estar como String, só mesmo vendo a planilha.

     

    Tenho a impressão que apesar de não aparecer no DataGridView, os dados estão presentes lá no DataTable... Confere?

     

    Por curiosidade, faça um teste para ver quais são os tipos de dados que estão sendo atribuídos, na hora do Fill:

     

    Code Snippet

     

     //...

     

     DataSet ds = new DataSet();

     da.Fill(ds);

     

     foreach (DataColumn coluna in ds.Tables[0].Columns)

     {

    MessageBox.Show(coluna.ColumnName + " = " + coluna.DataType.ToString());

     }

     

     

     

    De qualquer forma, como sugestão para resolver o problema, crie as colunas do DataTable você mesmo, de forma a garantir que os tipos de dados estão como você quer (string):

     

    Code Snippet

     

     //...

     DataSet ds = new DataSet();

     

     // Instância um novo DataTable

     DataTable suaDataTable = new DataTable();

     

     // Define as colunas com os tipos que você deseja

     suaDataTable.Columns.Add("Nome", typeof(string));

     suaDataTable.Columns.Add("Idade", typeof(string));

     suaDataTable.Columns.Add("Rua", typeof(string));

     suaDataTable.Columns.Add("Celular", typeof(string));

     

     // Faz o Fill na sua DataTable que já tem as colunas criadas

     da.Fill(suaDataTable);

     

     // Adiciona a DataTable no seu DataSet

     ds.Tables.Add(suaDataTable);

     

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    terça-feira, 30 de setembro de 2008 22:28
    Moderador