Bonsoir à tous,
je travaille sur une application qui envoie des mail,
j'aimerais recuperer la liste des destinataires (emails)
à partir d'un fichier excel. S'il vous plais si quelqu'un a une idée.
MERCI D'AVANCE.
Bonsoir à tous,
je travaille sur une application qui envoie des mail,
j'aimerais recuperer la liste des destinataires (emails)
à partir d'un fichier excel. S'il vous plais si quelqu'un a une idée.
MERCI D'AVANCE.
Salut.
Tu as deux méthodes, l'une qui ouvre le fichier, l'autre qui l'attaque par Odbc (mais qui demande que tes données soient dans une plage pouvant servir de "table").
Voici la première méthode qui ouvre le fichier. Dans ton projet, tu dois aller cocher la référence à la librairie Microsoft Excel. Tu dois également inclure la librairie Excel (using Excel = Microsoft.Office.Interop.Excel;)
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 List<string> addresses = new List<string>(); string filename = @"d:\fichier.xlsx"; string sheetname = "feuil1"; Excel.Application app = new Excel.Application(); Excel.Workbook wb = app.Workbooks.Open(filename); Excel.Worksheet ws = wb.Worksheets[sheetname]; Excel.Range rng = ws.Range["a2"]; while (rng.Value != null) { addresses.Add(rng.Value); rng = rng[2]; } wb.Close(false); app.Quit();
La seconde utilise une connexion ODBC pour accéder aux données. Elle requiert un peu de connaissance en sql, bien entendu. Par contre, elle ne demande pas d'ajouter une référence à Excel ni la ligne using Excel = ..., mais nécessite using Odbc = System.Data.Odbc;. Elle est plus rapide à l'exécution, mais comme dit plus haut, tes données doivent être organisées en table. Note bien le nom de la table avec le $ ajouté au nom de la feuille, le tout entouré de crochets...
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 string connectionstring = @"DSN=Excel Files;DBQ=D:\fichier.xlsx;" + @"DefaultDir=D:\Documents;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"; Odbc.OdbcConnection cn = new Odbc.OdbcConnection(connectionstring); string sql = "select Emails from [Feuil1$]"; Odbc.OdbcCommand cm = new Odbc.OdbcCommand(sql, cn); List<string>Emails = new List<string>(); try { cn.Open(); Odbc.OdbcDataReader rd = cm.ExecuteReader(); while(rd.Read()) Emails.Add(rd["Emails"].ToString()); } catch (Odbc.OdbcException e) { Console.WriteLine(e.ToString()); } finally { cn.Close(); }
Ces codes seront adaptés à ta situation. Je donne ceux-ci pour exemple, mais tu auras intérêt à travailler avec une classe, éventuellement statique, pour éviter du code poubelle.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Merci pour votre aide, ça à marché,
seulement j'ai utiliser OLDB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 String cUrl = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + "E:\\TP ASP C#\\TP3\\Classeur1.xlsx" + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES\""; OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = cUrl; OleDbCommand commande = new OleDbCommand("SELECT EMAIL " + "FROM [Feuil1$]", conn); List<String> liste = new List<string>(); conn.Open(); OleDbDataReader read = commande.ExecuteReader(); do { while (read.Read()) { liste.Add(Convert.ToString(read["EMAIL"])); } } while (read.NextResult());
L'un ou l'autre, c'est kif pour obtenir ce résultat.
Attention à penser à fermer la connexion en fin de parcours (c'est pourquoi j'avais un try-catch-finally). De plus, l'imbrication des boucles Do-While est inutile. Le While suffit.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
ok, merci pour vos conseils.
Partager