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.
Version imprimable
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:
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:
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.
Merci pour votre aide, ça à marché,
seulement j'ai utiliser OLDB.
Code:
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.
ok, merci pour vos conseils.