j'ai récupété un code qui pilote Excel via OLE.
Après sélection du fichier excel et création d'une instance Excel :
le fichier est lu celulle par celulle à partir d'une certaine ligne (premiereLigne =12) par la routine ci-joint :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 OpenDialog1.InitialDir := path; OpenDialog1.Filter := '*.xls|*.xls'; IF OpenDialog1.Execute THEN BEGIN TRY vMSExcel := GetActiveOleObject('Excel.Application'); EXCEPT vMSExcel := CreateOleObject('Excel.Application'); END; vMSExcel.Visible := false; //EMO true vXLWorkbooks := vMSExcel.Workbooks; NomFichierLong := OpenDialog1.Filename; vXLWorkbook := vXLWorkbooks.Open(OpenDialog1.Filename);
Le problème est que point de vue performance, c'est catastrophique. Il y a au total 94 colonnes et 534 valeurs ce qui représente 50196 cellules à lire.
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
19
20
21
22
23 IndexL := PremiereLigne; CelluleTemps := vMSExcel.Cells[IndexL, ColonneTemps]; TempsZero := StrToFloat(CelluleTemps); nbColonnesTotal := 0; WHILE CelluleTemps <> '' DO BEGIN Temps := (StrToFloat(CelluleTemps) - TempsZero) / 60; FOR IndexC := ColonneTemps + 1 TO NombreDeColonnes DO BEGIN Cellule := vMSExcel.Cells[IndexL, IndexC]; IF Cellule <> '' THEN BEGIN Valeur := StrToFloat(Cellule); LesSeriesSelect1[IndexC].AddXY(Temps, Valeur) XRange := Temps; END; END; StatusBar1.SimpleText := 'Excel file is been read - '+ IntToStr(IndexL)+ ' traitée';; inc(nbColonnesTotal); Application.ProcessMessages; inc(IndexL); CelluleTemps := vMSExcel.Cells[IndexL, ColonneTemps]; END;
(en pièce jointe, un exemple de fichier excel)
Je pense que la meilleure méthode est de récupérer le nombre de colonnes de données et le nombre de valeurs par données.(ce code est fait).
Ensuite, j'aimerai lire toutes les celulles d'un seul coup mais je ne sais pas comment faire? à moins que quelqu'un est une meilleure idée
Merci pour votre aide
Partager