IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

c++ builder, transfer des donnees du stringgrid vers un fichier excel?


Sujet :

C++Builder

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut c++ builder, transfer des donnees du stringgrid vers un fichier excel?
    Bonjour.

    mon probleme:

    j'ai un programme en c++ builder 6 qui est le suivant:
    -un StringGrid avec une seul ligne et 10 colonnes et avec des donnes quelconques.
    -et un bouton.
    en cliquant sur le boutton je enregistrer les donnees du StringGrid vers un fichier excel

    question: comment peut on faire cela?

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut taab84:
    Un lien sur le Forum qui je crois va repondre a ta question:

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut Ce n'ai pas toute a fait ce que je veut
    la methode montre dans ce lien c'est uniquement pour enregistrer dans un fichier texte ,moi je veut enregistrer dans un fichier excel (.xls) que je veut enregistrer mes donnees.
    merci quand meme

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Si tu sauvegarde ton StringGrid au format Texte avec un separateur de champs par exemple le ";" quand tu ouvrira ton fichier avec Excel celui ci se chargera de repartir chaque champ dans une cellule.
    Sinon il te faut par programme ouvrir Excel par Ole faire une boucle qui lit ton StringGrid et sauve chaque cellule du StringGrid dans une cellule Excel puis sauvegarder ton fichier Excel.
    Un lien sur le site pour t'aider a demarrer
    il y a aussi la FAQ

  5. #5
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut merci
    je te remercie beaucoup j'ai essayer de travailler dessus

    mais en ajoutant cette ligne:

    vWorksheet = vWorksheets.OleProdedure("Add");

    il m'a afficher ce message d'erreur:
    E2316 'OleProcedure' n'est pas un membre de 'Variant'

    comment je resoud cela

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Pense aux balises de code c'est le "#" en haut a droite
    Essaye de remplacer " OleProcedure " par " OleFunction ".
    Et ne pas oublier " #include <utilcls.h> "

  7. #7
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut encore une chose?
    j'ai tout recommencer et j'ai ecrit le code suivant en cliquant sur un boutton:

    debut code
    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Variant vXLWorkbook, vXLWorkbooks,vMSExcel;
     
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
     
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");	
    vXLWorkbook = vXLWorkbooks.OleFunction("Add");
    Variant vFileName;
     
    Variant vWorksheet, vSheetName;
     
    vSheetName = "Feuil1";
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets",vSheetName);
     
     
    vFileName = "File.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName);}
    fin code

    il genere un fichier excel mais il est vide
    Comment dois je faire pour remplir les donnees du stringgrid vers ce fichier?
    quel instruction ajouter?

    et merci beaucoup

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut taab84:
    Tout d'abord fecilitation pour tes recherches et ton code
    Pense aux balises de code c'est le "#" en haut a droite ton code sera plus lisible
    J'ai repris une partie de ton code et ajoute comment ecrire dans une cellule.
    Le .cpp
    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
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <utilcls.h> //  <--- ne pas oublier
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "ColorBtn"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ColorBtn1Click(TObject *Sender)
    {
    // 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");
    }
    vMSExcel.OlePropertySet("Visible", true);
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Add");
    vSheetName = "Feuil1";
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets",vSheetName);
    // on selectionne la Feuil1
    vWorksheet.OleProcedure("Select");
    // pour ecrire dans une cellule
    // ("Cells", ligne, colonne)
    vCell = vWorksheet.OlePropertyGet("Cells", 2, 2);
    // on passe la valeur a la cellule
    vCell.OlePropertySet("Value", "toto");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ColorBtn2Click(TObject *Sender)
    {
    vMSExcel.OleFunction("Quit");
    vMSExcel = Unassigned;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ColorBtn3Click(TObject *Sender)
    {
    vFileName = "File.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName);
    }
    //---------------------------------------------------------------------------
    le .h
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    //---------------------------------------------------------------------------
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include "ColorBtn.h"
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
            TColorBtn *ColorBtn1;
            TColorBtn *ColorBtn2;
            TColorBtn *ColorBtn3;
            void __fastcall ColorBtn1Click(TObject *Sender);
            void __fastcall ColorBtn2Click(TObject *Sender);
            void __fastcall ColorBtn3Click(TObject *Sender);
    private: // User declarations
    public:  // User declarations
            __fastcall TForm1(TComponent* Owner);
    Variant vXLWorkbook, vXLWorkbooks,vMSExcel;
    Variant vFileName;
    Variant vWorksheet, vSheetName;
    Variant vCell;
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    les parametres ligne colonne sont des entier
    "toto" est a remplacer par le contenu du StringGrid
    Pour recuperer le contenu d'une cellule du StringGrid:
    Valeur_A_Recuperer = StringGrid1->Cells[colonne][ligne];

  9. #9
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Par défaut Merci beaucoup
    bonjour blondelle
    Je te remercie pour ton aide car j'ai finie d'atteindre mon objectif.
    je n'ai pas copie le code source que tu m'a envoyer a 100%,mais je me suis inspire pour finaliser ma solution,et certains nouvelles instructions m'ont beaucoup aider

    voila mon code source pour enregistrer le contenu d'un stringgrid de 2 lignes et 5 colonnes:

    Unit1.cpp
    //---------------------------------------------------------------------------

    #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)
    {
    Variant vMSExcel;

    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);



    Variant vXLWorkbook, vXLWorkbooks;

    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Add");


    Variant vWorksheet, vSheetName;

    vSheetName = "Feuil1";

    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets",vSheetName);


    Variant vValue, vLn,vCl, vCell;
    int i,j;
    for(j=0;j<2;j++)
    {
    vLn=j+1;
    vLn=vLn.operator int();
    for(i=0;i<5;i++)
    {
    vCl =i+1;
    vCl =vCl.operator int();
    vCell = vWorksheet.OlePropertyGet("Cells",vLn,vCl);
    vValue = StringGrid1->Cells[i][j];
    vValue=vValue.operator int();
    vCell.OlePropertySet("Value", vValue);
    }
    }
    Variant vFileName;
    vFileName = "File.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName);
    }
    //---------------------------------------------------------------------------


    Unit1.h
    //---------------------------------------------------------------------------

    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Grids.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published: // Composants gérés par l'EDI
    TButton *Button1;
    TStringGrid *StringGrid1;
    void __fastcall Button1Click(TObject *Sender);
    private: // Déclarations de l'utilisateur
    public: // Déclarations de l'utilisateur
    __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

    Et merci encore pour ton aide

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Pas de probleme, mais c'est toi qu'il faut feliciter le pilotage Ole n'est pas evident.
    Tu a oublie d'inclure dans ton entete
    #include <utilcls.h> // <--- ne pas oublier
    fait le car dans certaines circonstances tu va avoir une erreur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exportation des données de sas vers un fichier excel
    Par util77 dans le forum Débutez
    Réponses: 2
    Dernier message: 30/07/2013, 18h26
  2. [XL-2007] Transferer des donnees d'excel vers mysql
    Par lenovo49 dans le forum Excel
    Réponses: 2
    Dernier message: 12/04/2012, 21h20
  3. Récupérer et envoyer des donnees d'ACCESS vers OCTAVE
    Par Triton972 dans le forum Mathématiques
    Réponses: 3
    Dernier message: 10/10/2011, 01h46
  4. Réponses: 6
    Dernier message: 19/03/2006, 19h51
  5. [VB6] exporter des données de Vb vers word
    Par ptitjean80 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 29/05/2004, 02h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo