[EXCEL] envoie de données dans une feuille Excel depuis DELPHI

drexl Messages postés 56 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 22 juillet 2014 - 22 juil. 2014 à 10:47
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 - 22 juil. 2014 à 16:30
Bonjour,

Je souhaite remplir un fichier EXCEL, prédéfini.

Pour cela, je fais
                 
for i:=0 to length(CF1)-1 do
begin
MaFeuille.Cells.Item[Actual_Line+I,2]:=FloatToStr(I);
MaFeuille.Cells.Item[Actual_Line+I,3]:=CF1[i];
MaFeuille.Cells.Item[Actual_Line+I,4]:=CF2[i];
MaFeuille.Cells.Item[Actual_Line+I,5]:=CF_MIN;
MaFeuille.Cells.Item[Actual_Line+I,6]:=CF_MAX;
end;
Cela fonctionne mais c'est lent (remplissage de chaque case, de chaque ligne, l'une après l'autre).

Quand on ouvre un fichier Text formater de manière :
A1;B1;C1
A2;B2;C2
A3;B3;C3
A4;B4;C4
A5;B5;C5
On peut lui dire que c'est un fichier délimité avec comme délimiter ';' et il remplit les cases comme il faut.

Existe il un moyen de faire la même chose depuis delphi avec qq chose comme cela ?

//ici le code qui lui dit que ce que je lui envoi est delimite par ';'
for i:=0 to length(CF1)-1 do
MaFeuille.Cells.Item[Actual_Line+I,2]:=FloatToStr(I)+';'+CF1[i]+';'+CF2[i]+';'+CF_MIN+';'+CF_MAX;


Par avance, merci.


PS : Win7, Delphi 2007, EXCEL 2010
--

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
22 juil. 2014 à 11:10
Bonjour,

Je ne fais pas de delphi .. mais en .net l'automation Excel est assez lente également ... lorsque l'on doit manipuler cellule par cellule....

La solution est de stocker toutes tes variables dans une variable tableau ( un Array)
Puis... directement de "coller" ton array dans ta feuille Excel ...
Comme ça.. tu ne fais plus qu' UN accès à Excel.


0
drexl Messages postés 56 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 22 juillet 2014
22 juil. 2014 à 11:30
merci de ton intérêt,
mais je ne vois pas trop comment faire, j'utilise déjà des tableaux ("CF1[i]").
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
22 juil. 2014 à 11:35
Tu créés un Array qui aura la même "forme/structure" que la plage de cellule que tu souhaites modifier/creer

Puis tu "colles" cet array dans ta feuille Excel.

Regarde sur le net... j'ai vu quelques exemples en Delphi pour le faire.
0
drexl Messages postés 56 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 22 juillet 2014
22 juil. 2014 à 12:01
j'ai fait ceci


SetLength(MyARRAY,0);
for i:=0 to length(CF1)-1 do
begin
setLength(MyARRAY, length(MyARRAY)+1);
MyARRAY[i]:=FloatToStr(I)+';'+FloatToStr(CF1[i])+';'+FloatToStr(CF2[i])+';'+FloatToStr(CF_MIN)+';'+FloatToStr(CF_MAX);
end;
for i:=0 to length(MyARRAY)-1 do
begin
MaFeuille.Cells.Item[Actual_Line+I,2]:=MyARRAY[I];
end;

Mais je n'arrive pas a séparer chaque ligne pour remplir les colonnes (et je cherche pourtant sur internet).
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
22 juil. 2014 à 12:30
Là tu utilises un tableau à 1 dimension....

Il te faut utiliser un tableau à 2 dimensions... ( lignes / colonnes ).. comme dans une feuille Excel...
Une plage de cellule ( un RANGE) c'est un array à deux dimensions.....

Voilà un peu de lecture :

http://www.add-in-express.com/creating-addins-blog/2013/11/29/populate-excel-workbooks-ranges-with-arrays/

http://delphi.cjcsoft.net/viewthread.php?tid=46129

http://edn.embarcadero.com/article/28076
0
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
Modifié par cs_yanb le 22/07/2014 à 16:44
Salut,
dans la question il y a un début de réponse...
Quand on ouvre un fichier texte formater...c'est un fichier délimité avec ... ';'.
Ben voilà fait un fichier texte ou CSV ;) peut-être en passant par un TStringList pour faire facilement un SaveToFile et Delimiter etc... et ensuite tu l'ouvres avec excel et tu l'enregistres avec SaveAs au format excel...
@+
0
Rejoignez-nous