2009-09-03 7 views
2

Comment lire le fichier Excel et afficher ses données en mode grille? J'ai essayé le fournisseur ODBC son fonctionnement mais, il se passe gagner "Dns = EXCELF", comment cela sera possible avec la connexion sring? Je génère ma chaîne de connexion de feuille Excel en tant que:Comment lire le fichier Excel dans C# par chaîne de connexion?

Fournisseur = MSDASQL.1; Persist Sécurité Info = False; ID utilisateur = admin; Source de données = Fichiers Excel; Catalogue initial = D: \ Parallelminds \ Tryouts \ sample.xlsx

Est-ce que c'est faux? Guidez-moi s'il-vous-plaît. quelle chaîne de connexion je dois donner là ...?

Répondre

4

Il varie quelque peu par la version d'Excel, mais si cela est pré-2007, vous pouvez trouver ce dont vous avez besoin ici: http://connectionstrings.com/excel

Sinon, les http://connectionstrings.com/. C'est là quelque part, je le promets :).

+1

+1 Très bon lien! N'oubliez pas de copier quelques informations sur vos réponses, vous ne savez jamais combien un lien va survivre! – backslash17

+0

Bon backslash, bien que connectionstrings.com existe depuis au moins 8 ou 9 bonnes années :) – jvenema

+0

Méthode sans valeur! Tronque les colonnes de texte à 255 caractères lors de la lecture. Il faut se méfier! Voir: http://stackoverflow.com/questions/1519288/jet-engine-255-character-truncation Le moteur ACE fait la même chose! Voir mon commentaire à la réponse sélectionnée dans ce lien. – Triynko

0

Cette Excel Data Provider est très pratique. Je l'ai récemment utilisé sur l'un des sites Web de mes clients avec quelques personnalisations mineures. Si vous regardez à travers le code, vous devriez être en mesure d'obtenir une idée solide de la façon d'interroger Excel à partir de C#. Juste un avertissement: si Excel n'est pas installé sur l'ordinateur de déploiement, vous serez limité à l'analyse des fichiers XLS standard (Office jusqu'en 2003) et ne pourrez pas lire XLSX (Office 2007).

+0

Voici un autre avertissement. Les moteurs JET et ACE peuvent tronquer les champs à 255 caractères, ils sont donc peu fiables. Lire des fichiers Excel est fondamentalement un hack total. La seule méthode fiable consiste à exécuter une instance d'Excel et à utiliser les classes d'interopérabilité COM .NET, mais cela ajoute une dépendance à votre application et nécessite l'installation d'Excel sur la machine. Quelle blague! – Triynko

2
public string BuildExcelConnectionString(string Filename, bool FirstRowContainsHeaders){ 
     return string.Format("Provider=Microsoft.Jet.OLEDB.4.0; 
     Data Source='{0}';Extended Properties=\"Excel 8.0;HDR={1};\"", 
     Filename.Replace("'", "''"),FirstRowContainsHeaders ? "Yes" : "No"); 
} 

public string BuildExcel2007ConnectionString(string Filename, bool FirstRowContainsHeaders){ 
     return string.Format("Provider=Microsoft.ACE.OLEDB.12.0; 
     Data Source={0};Extended Properties=\"Excel 12.0;HDR={1}\";", 
     Filename.Replace("'", "''"),FirstRowContainsHeaders ? "Yes" : "No"); 

} 

private void ReadExcelFile(){ 
    string connStr = BuildExcel2007ConnectionString(@"C:\Data\Spreadsheet.xlsx", true); 
    string query = @"Select * From [Sheet1$] Where Row = 2"; 
    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connStr); 

    conn.Open(); 
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
    System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader(); 
    DataTable dt = new DataTable(); 
    dt.Load(dr); 
    dr.Close(); 
    conn.Close(); 
} 
Questions connexes