2017-09-20 10 views
2

Je charge deux feuilles de calcul Excel. Les deux ont exactement le même en-tête dans la ligne 1. J'utilise le même code pour les deux.Deux tables Excel à peu près égales chargées en utilisant OLEDB - ont un en-tête et un sans

Maintenant, j'ai un en-tête pour le deuxième fichier, et pas d'en-tête pour le premier.

Code:

private static string GetExcelConnectionString(string Filename){return "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + Filename + ";Extended Properties = \"Excel 12.0 Xml;HDR=YES\"";} 

    private static void AddToListByOLE(string Filename, ref System.Collections.Generic.List<System.Data.DataTable> MyList, int nTab = -1) 
    { 
     string sql = string.Empty; 
     using (System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(GetExcelConnectionString(Filename))) 
     { 
      using (System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter()) 
      { 
       System.Data.DataTable dt = new System.Data.DataTable(); 
       using (System.Data.OleDb.OleDbCommand command = cn.CreateCommand()) 
       { 
        cn.Open(); 
        System.Data.DataTable dtSchema = cn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 

        string firstSheetName = dtSchema.Rows[0].Field<string>("TABLE_NAME"); 

        sql = "SELECT * FROM [" + firstSheetName + "]"; 
        command.CommandText = sql; 
        adapter.SelectCommand = command; 
        adapter.Fill(dt); 

        if (dt.Rows.Count == 0) 
        { 
         System.Data.OleDb.OleDbDataReader reader = command.ExecuteReader(); 
         dt.Load(reader); 
        } 
        cn.Close(); 

        MyList.Add(dt); 
       } 
      } 
     } 
    } 

Imput - les deux classeurs Excel affichés chevauchaient: Both excel workbooks - overlapped displayed

Chaîne de connexion: Used connection string

Résultat de la première importation (sans en-tête en DataTable): First worksheet imported - no header

Résultat de la deuxième importation (importation correcte avec en-tête): Second worksheet imported - with header

Quelqu'un a-t-il une idée? Je suis vraiment à court d'idées, car je charge ces fichiers dans une boucle en utilisant absolument la même chaîne de connexion (sauf le nom de fichier), et les mêmes fonctions.

Nous vous remercions à l'avance, J.

+0

Vous devez changer la chaîne de connexion pour la feuille de calcul qui n'a pas d'en-tête à 'HDR = Non' HDR est une abréviation pour Header! –

+0

Merci, mais ce n'est pas la solution. Maintenant, les deux fichiers n'ont pas d'en-tête. Je veux que les colonnes du datatable soient nommées par l'en-tête de la feuille Excel. – Jan021981

+0

La bonne façon de marquer votre question comme résolue à votre satisfaction est d'accepter une réponse. Ne pas changer le titre. –

Répondre

0

Je suis désolé. J'ai ouvert le fichier et l'ai enregistré une autre fois - l'importation n'a pas fonctionné. Peut-être, ce fichier avait un ancien format - je l'ai reçu via EM @ il.