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:
Résultat de la première importation (sans en-tête en DataTable):
Résultat de la deuxième importation (importation correcte avec en-tête):
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.
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! –
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
La bonne façon de marquer votre question comme résolue à votre satisfaction est d'accepter une réponse. Ne pas changer le titre. –