salut à tout le monde
bon j'ai un probleme au niveau de programmation c++ builder
je veux lire un fichier excel csv à partir de c++ builder pour que je puisse visualiser le signal obtenu à partir de ce fichier
Version imprimable
salut à tout le monde
bon j'ai un probleme au niveau de programmation c++ builder
je veux lire un fichier excel csv à partir de c++ builder pour que je puisse visualiser le signal obtenu à partir de ce fichier
Peut tu nous donner une question clair et précise, par ce qu'on ne peut pas vraiment t'aider, as tu fait des recherche dans le forum pour savoir comment lire un fichier sous BCB ?
Bonjour feshida,
Je vois que tu es nouveau(lle) sur developpez.com !
Moi aussi je viens de m'adhérer il y a peu de temps.
Pour ton projet, je pense que tu dois consulter tous les FAQ c++ surtout c++ builder d'abord !
Bonne lecture !
Salut feshida:
Voici un lien d'un Tutoriel sur le site:
Un lien sur la FAQ OleExcel:Citation:
Ensuite montre nous un bout de code que l'on puisse t'aider. ;)
MerciCitation:
Envoyé par randriano
bain oui vraiment je suis nouvelle sur ce forum donc j'espere trouver l'aide et je vous remercie infiniment de m'avoir guider
merci pour votre attention, alors ma question c'est comment je peux defiler ou faire declancher un signal sous c++ builder à partir d'un tableau sous excel en extension csvCitation:
Envoyé par pottiez
Merci Blondelle pour vetre aide c'est gentille de votre partCitation:
Envoyé par blondelle
j'espere que j'arriverais inchallah à faire quelques choses
Je ne comprend pas ta question c'est quoi le signal que tu veu declancher ?
bon je vais t'expliquerCitation:
Envoyé par blondelle
j'ai un tableau en excel en extension csv qui as des valeurs d'un enregistrement EEG (électroencephalogramme) et je doit les convertir en signal sous c++ builder
et voilà une partie de tableau c'est pas tout le tableau
Horaire 09:39:01 Fp1F7 F7T3 T3T5 T5O1 O1P3 P3C3
0 -0,45 1,78 16,35 1,7 -6,24 -12,83 4,42
1 -3,19 15,47 8,12 -3,18 -0,03 -12,82 0,15
2 -1,92 15,47 8,22 -4,15 3,74 -11,57 -4,04
3 5,13 16,26 8,62 -4,74 5,2 -10,78 -7,93
4 -3,53 17,98 14,43 2,41 -2,04 -11,57 -12,57
5 -0,92 18,53 14,18 1,85 -6,21 -9,59 -13,28
Est ce que c'est un graphique que tu doit representer a partir de tes donnees ?
tres bien tu m'a bien compris c'est un graphique que je doit presenter à partir de ces données mais un graph qui marche comme les signaux cardiauxCitation:
Envoyé par blondelle
voilà le tableau bien presenter dans la pièce jointe
bon j'arrive à aaceder à mon tableau excel j'ai arrive à le faire hamdoulilah mais comment je peux representer maintenant le graph
voilà mon @: XXX
Deja il te faut savoir quel type de graphique tu veu utiliser.
Pour cela dans Excel tu selectionne les cellules qui vont etre dans le graphique puis dans le menu deroulant "Insertion" tu selectionne "Graphique" la tu suit l'assistant quand tu saura le type de graphique ou de serie que tu utilisera je t'aiderais pour le code ;)
concernant le type de graph c'est graph avec courbes sinusoidale (les courbes)Citation:
Envoyé par blondelle
alors veuiller m'indiquer comment je px le realiser
Je te joind deux vues donne moi le numero du graphique que tu veu
merci blondelle de tous votre interêt et si je terminerais inchallah mon travail vous aurais un cadeau de ma part inchallahCitation:
Envoyé par blondelle
alors le graph que je veux c'est celui n°03 car il est sans les pionts mais je doit le faire sous c++ builder non pas sous excel
et il faut que je represente chaque colonne seul dans un graph car chaque colonne represente un electrode
Alors le code pour dessiner le Graph:
Le code est complet pour charger et dessiner le Graph et quitter, il a ete mis au point avec la collaboration de " banbit boy " il y a quelques temps.
Le .cpp
Le .hCode:
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
45
46
47
48
49
50
51
52
53
54 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { try { vMSExcel = Variant::GetActiveObject("Excel.Application"); } catch(...) { vMSExcel = Variant::CreateObject("Excel.Application"); } vMSExcel.OlePropertySet("Visible", true); vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Nouveau dossier\\path1\\path1.csv"; vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks"); vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName); // ici le fichier path1.csv est charge vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); vXLWorkbook.OlePropertyGet("Charts").OleFunction("Add"); vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertySet("ChartType", 73); vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("SetSourceData", vWorksheet.OlePropertyGet("Range", "A1:S19"), 2); // ici inserer un des deux code en annexe vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertySet("HasTitle", False); vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes", 1, 1).OlePropertySet("HasTitle", false); vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes", 2, 1).OlePropertySet("HasTitle", false); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { vMSExcel.OleFunction("Quit"); vMSExcel = Unassigned; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { //vFileName = "File.xls"; //vXLWorkbook.OleProcedure("Saveas", vFileName); } //---------------------------------------------------------------------------
Annexe: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 //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TButton *Button1; TButton *Button2; TButton *Button3; void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); void __fastcall Button3Click(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); Variant vMSExcel, vFileName, vXLWorkbooks, vXLWorkbook, vWorksheet; }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
dans le .cpp il te faut ajouter soit l'une ou l'autre des lignes suivantes
En esperant t'aider.Citation:
// graph sur une feuille a part
vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 1);
//
// graph sur la meme feuille que les donnees
vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 2, "path1");
Le plus beau cadeaux que tu puisse faire c'est d'aider les autres quand tu sera plus avancer en programmation :P
A+
Citation:
Envoyé par blondelle
merci beaucoup bondelle c vraiment gentill de ta part et franchement c un tres beau cadeau à vous faire et je te promis que je suis à la disposition de toute personne veux d'aide apres que je devienne une programmatrice inchaallah
bon je vais essayé ce code et vous dire le resultat
je veux juste une petite question ou je dois poser ces deux instruction:
// graph sur une feuille a part
vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 1);
//
// graph sur la meme feuille que les donnees
vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 2, "path1");
Salut feshida:
A la place de cette ligne dans le .cpp
mettre soit, si tu veu le Graph sur une Feuille a partCitation:
// ici inserer un des deux code en annexe
soit, si tu veu le Graph sur la meme Feuille que les donneesCitation:
// graph sur une feuille a part
vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 1);
Citation:
// graph sur la meme feuille que les donnees
vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 2, "path1");
merci blondelleCitation:
Envoyé par blondelle
j'ai arrive à le faire apres la lecture du cone hamdoulilah
ma question aujourd'hui; est ce que je px affiché le graph dans une fenêtre pres de ces boutton c à d affiché le graph sur c++ builder non pas ds feuille excel
et j'avais un probleme au niveau du boutton n°2
Pour ton erreur il faut que tu montre un peu de code.
Le programme tel qu'il est construit ne peut etre afficher le Graph que dans Excel.
j'ai un programme d'iscilloscope qui fait afficher les signaux dans une fenêtre mais j'arrive pas à le faire dans mon cas
il est dans la piece jointe
concernat le code est :
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; // Variants declares en public Variant vMSExcel, vXLWorkbooks, vXLWorkbook, vWorksheet, vLigne; Variant vFileName, vUsedRange, vLines, vShapeRange, vSelection; Variant vCell, XX, YY, X, Y, X1, Y1, fin_boucle; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { try { vMSExcel = Variant::GetActiveObject("Excel.Application"); } catch(...) { vMSExcel = Variant::CreateObject("Excel.Application"); } vMSExcel.OlePropertySet("Visible", true); vFileName = "C:\\Documents and Settings\\sicoumas\\Bureau\\path1.csv"; vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks"); vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName); // ici le fichier path1.csv est charge vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); vXLWorkbook.OlePropertyGet("Charts").OleFunction("Add"); vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertySet("ChartType", 73); vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("SetSourceData", vWorksheet.OlePropertyGet("Range", "A1:S19"), 2); // ici inserer un des deux code en annexe // graph sur une feuille a part vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 1); // graph sur la meme feuille que les donnees //vXLWorkbook.OlePropertyGet("ActiveChart").OleFunction("Location", 2, "path1"); vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertySet("HasTitle", False); vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes", 1, 1).OlePropertySet("HasTitle", false); vXLWorkbook.OlePropertyGet("ActiveChart").OlePropertyGet("Axes", 2, 1).OlePropertySet("HasTitle", false); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { vMSExcel.OleFunction("Quit"); vMSExcel = Unassigned; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { // vFileName = "File.xls"; // vXLWorkbook.OleProcedure("Saveas", vFileName); } //---------------------------------------------------------------------------
Bonjour,
je m'incurse ici uniquement pour faire mon boulot de moderation.
Aussi je demanderais a notre nouvelle membre, feshida, de bien vouloir donner un nom explicite a son post initial. "aide pour un projet" ca n'aide pas vraiment a savoir ce que ca contient.
Deuxiemement pour avoir parcouru, certes rapidemenent, l'ensemble du thread, je trouve que tu utilises un peu souvent "je veux". Apparement ca ne choque pas tes interlocuteur qui se donnent vraiment du mal et prennent du temps pour te repondre (captures d'ecran, code etc). A mon avis "je voudrais" serait bien plus approprie.
Blondelle t'a montre comment creer un graphique au seins d'excel, cependant tu sembles dire dans ton dernier post (et un peu plus haut) que tu le voulais dans ton application : je te recommande d'aller voir du cote du composant TTeeChart ou a defaut TChart. La documentation est abondante sur le sujet sur le net, tu devrais trouver sans trop de difficultes.
Bon courage.
Citation:
Envoyé par Neilos
merci pour votre interêt Neilos;
je commence mon message par ma demande depardon à tout le monde surtout à blondelle j'ai rien exprimé avec je veux franchement je suis desolé et je le remercie infinilent de leur aide car il (elle) était serviable avec moi et je m'excuse pour tout mal education avec vous dans ce joli forum
concernant mon projet il tourne autour de l'epilepsie sous titre theme:
conception et réalisation d'un système de détection de "patterns" des signaux de l'EEG
j'ai des enregistrements qu'il me faut que les faire defiler sous c++ builder et ces enregistrement sont des tableaux sous excel en extention csv
j'espere que vous accepter mes excuses et merci pour tout interet ou attention de voptre part
mes salutations et mes remerciments à ts
je vous remercie blondelle et je m'excuse pour tout mot dit de ma part sans faire attention accepter tout mes excusesCitation:
Envoyé par blondelle
pour le code j'ai essayé de faire pas à pas j'ai trouvé l'erreur dans cette ligne qui me declanche l'exception:
OleProcedure(name, static_cast<TAutoArgsBase*>(&args));
Salut feshida:
Merci Neilos de ton intervention.
feshida je pense que tu devrais mieux preciser tes besoins, ce qui permettra aux personnes qui t'aident de te renseigner plus vite.
Pour ce qui est de l'exception et si tu a copie mon code sans erreur elle est normale dans cette portion de code sous l'editeur ou en mode pas a pas, mais n'apparaitra pas dans le code compile en .exe:
Si j'ai bien compris ton besoin tu veu recuperer les donnees du fichier Excel et t'en servir pour tracer tes courbes a l'aide du programme que tu a posteCode:
1
2
3
4
5
6
7
8
9
10
11
12 // Le code suivant permet donc de lancer Excel si il n'est pas déjà actif // ou de se connecter à l'instance existante éventuelle. try { vMSExcel = Variant::GetActiveObject("Excel.Application"); } // une exception est normale en pas a pas si Excel n'est pas cree catch(...) { vMSExcel = Variant::CreateObject("Excel.Application"); }
Merci blondelle pour votre reponseCitation:
Envoyé par blondelle
tres bien c'est se ce j'en ai besion vraiment la creation de courbes et graphe à partir de fichier csv sous c++ builder.
je vous remercie infiniment blondelle
Voici comment recuperer la valeur d'une cellule Excel
Dans une boucle qui balaie tes lignes et colonnes tu recupere tes valeurs que tu passe au programme de tracageCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 Variant vCell; // ici le fichier path1.csv est charge vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1); // on selectionne la Feuil1 au cas ou vWorksheet.OleProcedure("Select"); // pour se positionner sur une cellule // ("Cells", ligne, colonne) int ligne = 3; // Numero de la ligne int colonne = 2; // Numero de la colonne vCell = vWorksheet.OlePropertyGet("Cells", ligne, colonne); // on recupere le contenu de la cellule float vValue = vCell.OlePropertyGet("Value");
Citation:
Envoyé par blondelle
merci blondelle pour votre reponseje vais essyé ça et je repondras inchallah ma resultat
merci
blondelle j'ai trouvé ce code esct il peut me servirM
s'il vous plait j'ai une question: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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; // Variants declares en public Variant vMSExcel, vXLWorkbooks, vXLWorkbook, vWorksheet, vLigne; Variant vFileName, vUsedRange, vLines, vShapeRange, vSelection; Variant vCell, XX, YY, X, Y, X1, Y1, fin_boucle; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { vMSExcel = Variant::CreateObject("Excel.Application"); vMSExcel.OlePropertySet("Visible", true); // si on n'ouvre pas de fichier utiliser les deux lignes suivantes //vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks"); //vXLWorkbook = vXLWorkbooks.OleFunction("Add"); // si on ouvre un fichier on utilise les trois lignes suivantes vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\plan_gps\\PLAN_GPS\\dessin_releve_GPS_essai.xls"; vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks"); vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName); /////////// // essai d'utilisation des fonctions de dessin mono-traits multi-points // msoEditingAuto = 0, msoSegmentLine = 0 // on selectionne la Feuille coordonnees vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", "COORDONNEES"); // on calcul le nombre de lignes utilisees de la Feuille coordonnees vUsedRange = vWorksheet.OlePropertyGet("UsedRange"); vLines = vUsedRange.OlePropertyGet("Rows"); int ii = vLines.OlePropertyGet("Count"); // on recupere les valeurs de depart vCell = vWorksheet.OlePropertyGet("Cells", 3, 1); XX = vCell.OlePropertyGet("Value"); vCell = vWorksheet.OlePropertyGet("Cells", 3, 2); YY = vCell.OlePropertyGet("Value"); // on selectionne la Feuille circuit2 vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", "CIRCUIT2"); // hors boucle d'affichage on donne les coordonnees de depart vLigne = vWorksheet.OlePropertyGet("Shapes").OleFunction("BuildFreeform", 0, XX, YY); // on passe par boucle les coordonnees de la courbe for (int i = 4; i <= (ii - 1); i++) { // debut for i vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", "COORDONNEES"); vCell = vWorksheet.OlePropertyGet("Cells", i, 1); X = vCell.OlePropertyGet("Value"); vCell = vWorksheet.OlePropertyGet("Cells", i, 2); Y = vCell.OlePropertyGet("Value"); vCell = vWorksheet.OlePropertyGet("Cells", i + 1, 1); X1 = vCell.OlePropertyGet("Value"); vCell = vWorksheet.OlePropertyGet("Cells", i + 1, 2); Y1 = vCell.OlePropertyGet("Value"); // dans la boucle on donne le cordonnees des segments que l'on va tracer vLigne.OleProcedure("AddNodes", 0, 0, X, Y); vLigne.OleProcedure("AddNodes", 0, 0, X1, Y1); // apres avoir ferme la boucle on trace la ligne } // fin for i vLigne.OleFunction("ConvertToShape"); // on selectionne la feuille circuit2 vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", "CIRCUIT2"); vWorksheet.OleProcedure("Select"); // on selectionne le trace vWorksheet.OlePropertyGet("Shapes").OleFunction("SelectAll"); // on change l'epaisseur vMSExcel.OlePropertyGet("Selection").OlePropertyGet("ShapeRange").OlePropertyGet("Line").OlePropertySet("Weight", 8); // on change la couleur vMSExcel.OlePropertyGet("Selection").OlePropertyGet("ShapeRange").OlePropertyGet("Line").OlePropertyGet("ForeColor").OlePropertySet("SchemeColor", 22); // on le rend visible ou invisible vMSExcel.OlePropertyGet("Selection").OlePropertyGet("ShapeRange").OlePropertyGet("Line").OlePropertySet("Visible", false); vMSExcel.OlePropertyGet("Selection").OlePropertyGet("ShapeRange").OlePropertyGet("Line").OlePropertySet("Visible", true); } //---------------------------------------------------------------------------
"coorconnes" signifie quoi en code est ce que le nom de la feuille
merci pour votre intêret
Quand tu post du code pense a le mettre entre les balises code c'est le " # " en haut a droite.
Le code que tu a trouve est un de mes post qui permet de dessiner sur une feuille Excel apparament ce n'est pas ce que tu veu
Coordonnee est une feuille d'ou on extrait les donnees
merci blondelle pour tous vos conseilsCitation:
Envoyé par blondelle
merci infiniment
donc qu'est ce que je fais maintenant je suis vraiment perturbée
Et bien comme tu veu tracer tes courbes sur un composant BCB tu a la facon de recuperer tes donnees du fichier Excel a toi d'ecrire le code pour tracer la ou les courbes
merci blondelleCitation:
Envoyé par blondelle
enfin pouvez vous m'indiquer s'il vous plait sous quel langage je px realiser ce pb
merci
La je ne comprend plus, avec l'Exemple sous Excel tu me dis que c'est sous BCB que tu doit le faire, je t'ai donne la facon d'extraire les donnees de ton fichier, maintenant tu me demande quel language utiliser, BCB c'est du C++
pardon blondelleCitation:
Envoyé par blondelle
le langage utilisé m'interrese pas ce qui est interessant c'est de realiser le pb et visualiser le graph en marche
je m'excuse car j'ai vous demandé de m'aider en utilisant le BCB car c'est le seul logiciel que je px travailler mais s'il y a d'autres qui px me le realiser facilement je px l'utiliser
Le code que je t'ai passe et celui que tu a trouve sont fonctionnels il faut juste Excel il n'y a qu'un minimum d'adaptation a faire
merci blondelle pour votre reponse et vos conseils
enfin vs allez trouver ds la pièce jionte l'image pour avoir une idée de ce que je cherche