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 :

probleme d'ouverture d'un fichier excel


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut probleme d'ouverture d'un fichier excel
    Bonjour,
    Je souhaite ouvrire un fichier excel déja existant afin de modifier des cellules.
    Voici mon programme:
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <utilcls.h>
     
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    extern PACKAGE wchar_t * __fastcall StringToOleStr(const AnsiString Source);
    TForm1 *Form1;
    Variant vMSExcel, vXLWorkbooks, vXLWorkbook, vWorksheet,vFileName;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbooks= vXLWorkbooks.OleFunction("Add");
    vXLWorkbooks = vXLWorkbooks .OlePropertyGet("Worksheets",1);
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    vMSExcel.OleFunction("Quit");
    vMSExcel = Unassigned;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    Variant vValue, vRange, vCell;
    AnsiString s;
    s=Edit1->Text;
    vCell = vWorksheet.OlePropertyGet("Cells",4,1);
    vValue = s.c_str();
    vCell.OlePropertySet("Value", vValue);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Variant vValue, vRange, vCell;
    AnsiString s;
    s=Edit1->Text;
    vCell = vWorksheet.OlePropertyGet("Cells",1,1);
    vValue = s.c_str();
    vCell.OlePropertySet("Value", vValue);
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
     
    vMSExcel = Variant::GetActiveObject("Excel.Application");
     
    vMSExcel.OlePropertySet("Visible", true);
    vFileName= "C:\\Classeur.xls";
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbooks= vXLWorkbooks.OleFunction("Open",vFileName);
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    vXLWorkbook.OleProcedure("Save");
    }
    Mon programme ouvre bien lorsque que jappuye sur le bouton 2 (creation d'un nouveau fichier) mais il me met une erreur lorsque que je souhaite ouvrir un fichier déja existant (bouton 6) "Opération non disponible".
    1) Cependant lorsque je clique sur le bouton 2,ensuite je ferme la page excel je peu cliquer sur le bouton 6 et sans erreur...
    2) De plus si je veu modifier une cellule d'un fichier existant il me met une erreur "OLE error 800A01A8"

    Merci d'avance

  2. #2
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    C'est normal que ton Bouton6 plante lorsque tu cliques dessus en premier car tu n'as pas d'instance d'Excel d'ouverte.

    Cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vMSExcel = Variant::GetActiveObject("Excel.Application");
    Te renvois l'instance d'Excel ouverte s'il y en a une, null sinon.

    Donc tu peux faire un test s'il y a une instance d'excel d'ouverte, si c'est le cas, tu la récupère, sinon tu en crée une comme tu le fait dans ton Bouton2.

    Et là normalement tu ne devrais pas avoir d'erreur.

    Ton Bouton6 fonctionne après que tu est cliqués sur le Bouton2 car tu as une instance d'Excel d'ouverte donc tu peux la récupérer.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    ahh ok !! Je voi le truc maintenant ..
    Mais est que tu sais pourquoi je ne peut pas modifier mon fichier excel avec mes 2 autre boutons (bouton 1 et 5 ) ?

    Merci de ta rapidité

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Je ne sais pas si cela viens forcément de cela mais essaye ceci pour l'écriture de ta valeur dans une cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AnsiString s;
    ...
    vValue = StringToOleStr(s);
    vCell.OlePropertySet("Value", vValue);

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    non sa marche pas ,sa me met une erreur..
    Ambiguity between '_fastcall System::StringToOleStr(cont System::AnisString)' and '_fastcall System::StringToOleStr(cont System::AnisString)'

  6. #6
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    essaye en incluant ceci au début de ta form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "Excel_XP.h"
    Après je sais pas quelle version tu utilises de C++ Builder, et surement qu'il y a une classe qui existe avec les versions plus récentes

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

Discussions similaires

  1. Probleme d'ouverture d'un fichier Excel
    Par sihammaster dans le forum VB.NET
    Réponses: 0
    Dernier message: 20/01/2011, 11h56
  2. Ouverture d'un fichier excel predefini
    Par nberthonneau dans le forum Access
    Réponses: 10
    Dernier message: 13/06/2007, 22h14
  3. [VBA-E] Probleme avec l'ouverture d'un fichier Excel
    Par mennix dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/12/2006, 11h11
  4. [Debutant][VB.net] Probleme d'ouverture d'une fichier excel
    Par Tatouine dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/06/2006, 12h42
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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