none
Ao importar excel para um DataGridView, coluna lendo somente numeros automaticamente RRS feed

  • Pergunta

  • Pessoal, eu fiz um código para importa um excel que uso para dentro de um datagridview windows forms, porem a coluna "Codigo de Fabrica" esta puxando somente numeros, e nao pode, pode esse codigo é alfanumerico.. como tratar isso??

    Segue o codigo

                    

     private DataTable GetTabelaExcel(string arquivoExcel)
            {
                DataTable dt = new DataTable();
                try
                {
                    //pega a extensão do arquivo
                    string Ext = Path.GetExtension(arquivoExcel);
                    string connectionString = "";
                    //verifica a versão do Excel pela extensão
                    if (Ext == ".xls")
                    { //para o  Excel 97-03    
                        connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" + arquivoExcel + "; Extended Properties = 'Excel 8.0;HDR=YES'";
                    }
                    else if (Ext == ".xlsx")
                    { //para o  Excel 07 e superior
                        connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" + arquivoExcel + "; Extended Properties = 'Excel 8.0;HDR=YES'";
                    }
                    OleDbConnection conn = new OleDbConnection(connectionString);
                    OleDbCommand cmd = new OleDbCommand();
                    OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
                    cmd.Connection = conn;
                    conn.Open();
                    DataTable dtSchema;
                    dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    string nomePlanilha = dtSchema.Rows[0]["TABLE_NAME"].ToString();
                    conn.Close();
                    //le todos os dados da planilha para o Data Table    
                    conn.Open();
                    cmd.CommandText = "SELECT * From [" + nomePlanilha + "]";
                    dataAdapter.SelectCommand = cmd;
                    dataAdapter.Fill(dt);
                    dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;
                    conn.Close();


                }
                catch (Exception ex)
                {
                    throw ex;
                }
                return dt;
            }

     private void CarregaDadosExcel()
            {
                try
                {
                    //limpa o combobox
                    comboBox1.Items.Clear();

                    //converte os dados do Excel para um DataTable
                    DataTable dt = GetTabelaExcel(arquivoExcel);

                    //ajusta a largura das colunas aos dados
                    dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
                    dataGridView1.DataSource = dt;

                    //No total de registros
                    label3.Text = (dataGridView1.Rows.Count).ToString() + "  Registros lidos";

                    string[] listaNomeColunas = dt.Columns.OfType<DataColumn>().Select(x => x.ColumnName).ToArray();

                    //Adiciona os nomes das colunas no Combobox
                    comboBox1.Items.AddRange(listaNomeColunas);

                    if (comboBox1.Items.Count > 0)
                        comboBox1.SelectedIndex = 0;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro :" + ex.Message);
                }
            }

    Obrigado a todos

    sexta-feira, 20 de março de 2020 13:58

Respostas

  • eu fiz mais ou menos isso, porem coloquei um 'a'...

    a formatação no excel ta como GENERAL, no excel aceita normal letra e numero.. na hora de importar mesmo que ele traz em branco aonde tem letra no meio... 

    o codigo que utilizei abaixo antes de preencher o datasource do grid... tive q colocar em 2 ou mais colunas para dar certo

                                   

    Usei REGEX para verificar se é numero ou letra no começo da celula...se começar com letra, funciona normal

    Segue o codigo:


    //Regex que vc quer
                    string verifica = "^[0-9]";
                    string PrimeiroCaracter = "";

                    Microsoft.Office.Interop.Excel.Application excelApp = new                 Microsoft.Office.Interop.Excel.Application();
                    string myPath = textBox1.Text;

                    excelApp.Workbooks.Open(myPath);

                    /////////////////1° linha depois do cabeçalho///////////////
                    int rowIndex = 3;
                    int colIndex = 4;

                    PrimeiroCaracter = (excelApp.Cells[rowIndex, colIndex].Value.ToString().Substring(0, 1));
                    if (Regex.IsMatch(PrimeiroCaracter, verifica))
                    {
                       //  MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                        excelApp.Cells[rowIndex, colIndex].Value = "a" + excelApp.Cells[rowIndex, colIndex].Value();

                       //   MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                    }
                    else
                    {

                    }


                    /////////////////2° linha depois do cabeçalho///////////////
                    rowIndex = 4;
                    colIndex = 4;

                    PrimeiroCaracter = (excelApp.Cells[rowIndex, colIndex].Value.ToString().Substring(0, 1));
                    if (Regex.IsMatch(PrimeiroCaracter, verifica))
                    {
                        //  MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                        excelApp.Cells[rowIndex, colIndex].Value = "a" + excelApp.Cells[rowIndex, colIndex].Value();

                        //   MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                    }
                    else
                    {

                    }

    • Marcado como Resposta JNFinfo sexta-feira, 20 de março de 2020 15:35
    sexta-feira, 20 de março de 2020 14:46

Todas as Respostas

  • Amigo, se não me engano você precisa alterar isso no excel, na formatação da coluna, definir a coluna como texto!
    Se mesmo assim não funcionar, em cada registro coloque um o caractere ' , por exemplo o valor na coluna esta 1207678, ficaria '1207678.
    sexta-feira, 20 de março de 2020 14:12
  • eu fiz mais ou menos isso, porem coloquei um 'a'...

    a formatação no excel ta como GENERAL, no excel aceita normal letra e numero.. na hora de importar mesmo que ele traz em branco aonde tem letra no meio... 

    o codigo que utilizei abaixo antes de preencher o datasource do grid... tive q colocar em 2 ou mais colunas para dar certo

                                   

    Usei REGEX para verificar se é numero ou letra no começo da celula...se começar com letra, funciona normal

    Segue o codigo:


    //Regex que vc quer
                    string verifica = "^[0-9]";
                    string PrimeiroCaracter = "";

                    Microsoft.Office.Interop.Excel.Application excelApp = new                 Microsoft.Office.Interop.Excel.Application();
                    string myPath = textBox1.Text;

                    excelApp.Workbooks.Open(myPath);

                    /////////////////1° linha depois do cabeçalho///////////////
                    int rowIndex = 3;
                    int colIndex = 4;

                    PrimeiroCaracter = (excelApp.Cells[rowIndex, colIndex].Value.ToString().Substring(0, 1));
                    if (Regex.IsMatch(PrimeiroCaracter, verifica))
                    {
                       //  MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                        excelApp.Cells[rowIndex, colIndex].Value = "a" + excelApp.Cells[rowIndex, colIndex].Value();

                       //   MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                    }
                    else
                    {

                    }


                    /////////////////2° linha depois do cabeçalho///////////////
                    rowIndex = 4;
                    colIndex = 4;

                    PrimeiroCaracter = (excelApp.Cells[rowIndex, colIndex].Value.ToString().Substring(0, 1));
                    if (Regex.IsMatch(PrimeiroCaracter, verifica))
                    {
                        //  MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                        excelApp.Cells[rowIndex, colIndex].Value = "a" + excelApp.Cells[rowIndex, colIndex].Value();

                        //   MessageBox.Show(excelApp.Cells[rowIndex, colIndex].Value.ToString());
                    }
                    else
                    {

                    }

    • Marcado como Resposta JNFinfo sexta-feira, 20 de março de 2020 15:35
    sexta-feira, 20 de março de 2020 14:46