Bonjour,
J'aimerai accéder à la valeur d'une cellule de mon fichier Excel (.xlsm).
Et au passage si quelqu'un à des tuto: un lien ou des pdf de cours, je suis preneur. Je n'ai rien trouvé sur le net.
Merci
Version imprimable
Bonjour,
J'aimerai accéder à la valeur d'une cellule de mon fichier Excel (.xlsm).
Et au passage si quelqu'un à des tuto: un lien ou des pdf de cours, je suis preneur. Je n'ai rien trouvé sur le net.
Merci
Il y a une façon relativement simple via la dll fournit par Microsoft.
Un peu de doc ici, et un exemple :
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 using Microsoft.Office.Interop; [....] OpenFileDialog ofDialog = new OpenFileDialog(); ofDialog.Filter = "Excel 2003 Files (.xls)|*.xls"; Microsoft.Office.Interop.Excel.Application xlApp; Microsoft.Office.Interop.Excel.Workbook xlWorkbook; Microsoft.Office.Interop.Excel._Worksheet xlWorksheet; DialogResult dResult = ofDialog.ShowDialog(); if (true) { try { xlApp = new Microsoft.Office.Interop.Excel.Application(); xlWorkbook = xlApp.Workbooks.Open(ofDialog.FileName); xlWorksheet = xlWorkbook.Sheets[1]; Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange; int rowCount = xlRange.Rows.Count; int colCount = xlRange.Columns.Count; // Read the Excel file entirely List<String> labels = new List<String>(); for (int i = 0; i < rowCount; i++) { for (int j = 0; j < colCount; j++) { try { labels.Add(xlRange.Cells[i, j].Text); } catch (Exception) { } } } } catch (Exception ee) { System.Windows.Forms.MessageBox.Show(ee.Message); } }
Merci.
Où est ce que je rentre l'URL de mon fichier Excel? C'est dans ofDialog.Filter?
Dans ce cas là je mets ça:
?Code:ofDialog.Filter = "C:\\Users\\Ziad\\Documents\\Visual Studio 2010\\Projects\\PPE\\PlaceBourciere.xlsm";
Et aussi OpenFileDialog et DialogResult appartiennent bien à l'espace System.Windows.Forms? Quant je mets cet espace, une erreur est signalé. Windows est souligné en rouge et me dit qu'il n'existe pas dans l'espace de noms 'System'.
J'utilise un OpenFileDialog comme "browser" depuis une application WPF.
Tu peux directement fourni un chemin vers ton fichier :
Code:xlWorkbook = xlApp.Workbooks.Open(@"C:\Temp\myExcel.xls");
Sinon, pour en revenir à la question initiale, oui, avec OLEDB tu peux accéder à Excel, et chaque onglet est vu comme une table différente.
Selon ce que tu veux faire, ça peut être beaucoup plus pratique ou largement moins qu'avec le module interopérabilité Microsoft.
A noter que OLEDB dispense d'avoir Office sur la machine pour travailler avec les fichiers Excel, alors qu'Interop impose d'avoir Office installé (qui plus est, dans une version donnée, figée)
http://www.connectionstrings.com/excel-2007
http://www.connectionstrings.com/excel
D'accord merci pour vos reponces.
Génial StringBuilder j'allais justement poster une question concernant le fait qu'Office soit installé ou pas.
À propos de ce sujet, le code de Er3van utilise bien le module d'interopérabilité de Microsoft? Et donc l'utilisateur de mon logiciel devra avoir Office :S.
N'y a t'il pas une autre solution que celle ci pour accéder à la cellule d'un classeur Excel?
Voici ce que j'ai pu faire pour l'instant:
Et donc après pour accéder au valeur je dois passer par des requettes SQL? Il n'y a pas plus simple avec par exemple acceder par des indices [i][j]? [1][2] == B1Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + "C:\\Users\\Ziad\\Documents\\Visual Studio 2010\\Projects\\PPE\\PlaceBourciere.xlsm" + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;MAXSCANROWS=15;READONLY=FALSE\""; OleDbConnection objConn = new OleDbConnection(sConnectionString); objConn.Open(); OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [index$]", objConn); OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(); objAdapter1.SelectCommand = objCmdSelect; DataSet objDataset1 = new DataSet(); objAdapter1.Fill(objDataset1); DataTableCollection dta = objDataset1.Tables;
il y a de nombreuse librairie gratuite pour excel tel que Epplus, excellibrary ... que tu trouveras sur codeplex, codegoogle... elles te permettront de lire et écrire dans un fichier excel sans avoir office installé sur ta machine
non plus à l'automaton (l'exemple de Er3van), ton fichier excel est un fichier de quel version d'excel?
Le fichier est utilisé par Excel 2007 et 2010 sous Windows; et sous Excel 2011 sous Mac. C'est un fichier xlsm car il contient des macros que je voudrai appeler depuis mon application.
ah je ne sais pas s'ils permettent de faire ça par contre, je sais qu'ils fonctionnent avec les xlsx, tes macros effectuent quoi comme action (peut être pourrais-tu les réecrire en c#)
Oui c'est vrai je pourrais les recoder en C#, c'est d'ailleurs une des améliorations éventuelle de mon logiciel que j'avais prévu de faire. Ces macros permet de télécharger des données depuis Yahoo Finance et de les organiser dans ma feuille Excel. Donc en gros à chaque fois que je fais appel à cette macro, j'ai les dernière valeurs boursière.
Petit hors sujet:
{D'ailleurs étant donné que les traitements met beaucoup de temps en VBA, est-ce que si je recode tout en C# ça sera plus rapide? Est-ce que le C# est plus rapide, en générale, que les macros VBA?}
Tu ferai comment pour lire par exemple la valeur de la cellule B10 avec Oledb sur ton fichier xlsx? Pour une chose qui parait si simple j'arrive pas à trouver de réponse sur internet.
après tout dépend de qui est lent dans le traitement de ta macro, je pourrais pas t'aider au niveau d'oledb je ne l'ai jamais utilisé
Et avec Epplus et excellibrary, ou autre qui permettrai de lire et écrire dans un fichier excel sans avoir office installé sur la machine?
tu as des exemples sur leur page dédiée mais pas sur qu'ils arrivent à lire un xlsm, à ta place j'essayerai de recoder la macro plutot que de m'amuser à lire le fichier excel pour utiliser sa macro