none
Perde primeira linha ao ler arquivo do Excel RRS feed

  • Pergunta

  • Pessoal,
    Tenho o seguinte metodo para importar informacoes de uma planilha do Excel:

            public static DataSet XlsxToDataSet(string File) 
            { 
                DataSet ds = new DataSet(); 
                OleDbDataAdapter MyCommand; 
                OleDbConnection MyConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + File + ";Extended Properties=Excel 12.0;"); 
                MyCommand = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Plan1$]", MyConnection); 
                MyCommand.TableMappings.Add("Table", "Table"); 
                MyCommand.Fill(ds); 
                MyConnection.Close(); 
                return ds; 
            }

    O que esta acontecendo é que a primeira linha do arquivo Excel nao esta sendo importada. Alguem sabe o que poderia esta causando o problema?

    Obrigado pela atenção.

    Abs!

    sexta-feira, 11 de maio de 2012 18:52

Respostas

  • Olá Marcelo,

    Neste caso, o ADO.Net encara que a primeira linha das planilhas corresponde ao nome das colunas.

    Se vc olhar os nomes das colunas do DataTable gerado vc verá que o nome das colunas corresponde aos valores da primeira linha.

    public static DataSet XlsxToDataSet(string File) { DataSet ds = new DataSet(); OleDbDataAdapter MyCommand; OleDbConnection MyConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + File + ";Extended Properties=Excel 12.0;"); MyCommand = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Plan1$]", MyConnection); MyCommand.TableMappings.Add("Table", "Table"); MyCommand.Fill(ds); MyConnection.Close(); foreach (DataColumn item in ds.Tables[0].Columns) {

    // Nome das colunas Console.WriteLine(item.ColumnName); } return ds; }


    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 11 de maio de 2012 19:36
    Moderador
  • Marcelo você pode colocar uma propriedade na sua connectionstring chamada HDR, ela indica se no seu arquivo excel a primeira linha é o nome das colunas ou não:

    "HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.

    http://connectionstrings.com/excel

    Exemplo de connextionstring com HDR:
    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls;Extended Properties="Excel 12.0;HDR=NO";



    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    sexta-feira, 11 de maio de 2012 20:26

Todas as Respostas

  • Olá Marcelo,

    Neste caso, o ADO.Net encara que a primeira linha das planilhas corresponde ao nome das colunas.

    Se vc olhar os nomes das colunas do DataTable gerado vc verá que o nome das colunas corresponde aos valores da primeira linha.

    public static DataSet XlsxToDataSet(string File) { DataSet ds = new DataSet(); OleDbDataAdapter MyCommand; OleDbConnection MyConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + File + ";Extended Properties=Excel 12.0;"); MyCommand = new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Plan1$]", MyConnection); MyCommand.TableMappings.Add("Table", "Table"); MyCommand.Fill(ds); MyConnection.Close(); foreach (DataColumn item in ds.Tables[0].Columns) {

    // Nome das colunas Console.WriteLine(item.ColumnName); } return ds; }


    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    sexta-feira, 11 de maio de 2012 19:36
    Moderador
  • Fernando,

    Foi isso mesmo que aconteceu, no caso aqui vou ver se tem como contornar isso ou entao acho que vou ter que solicitar que o arquivo seja enviado com cabeçalho.

    De qualquer forma, obrigado pelo feedback!

    Abraço!

    sexta-feira, 11 de maio de 2012 19:57
  • Marcelo você pode colocar uma propriedade na sua connectionstring chamada HDR, ela indica se no seu arquivo excel a primeira linha é o nome das colunas ou não:

    "HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.

    http://connectionstrings.com/excel

    Exemplo de connextionstring com HDR:
    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls;Extended Properties="Excel 12.0;HDR=NO";



    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    sexta-feira, 11 de maio de 2012 20:26