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 :

OleExcel sauvegarder un fichier quelconque avec la boite de dialogue Enregistrer Sous


Sujet :

C++Builder

  1. #1
    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
    Points : 3 766
    Points
    3 766
    Par défaut OleExcel sauvegarder un fichier quelconque avec la boite de dialogue Enregistrer Sous
    Voici comment enregistrer un fichier Excel en utilisant la boite de dialogue "Enregistrer sous" d'Excel c'est un melange de OleExcel et de recuperation de Handle de fenetres
    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
    57
    58
    59
    60
    61
    62
    63
    64
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <utilcls.h>
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    Variant vMSExcel;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    Variant vXLWorkbooks, vXLWorkbook, vWorksheet;
    Variant vWorksheets;
    vMSExcel = Variant::CreateObject("Excel.Application");
    vMSExcel.OlePropertySet("Visible", true);
    Variant vFileName, vNotUsed;
    vNotUsed = Unassigned;
    vFileName = "C:\\Classeur2.xls";
    vXLWorkbooks = vMSExcel.OlePropertyGet("Workbooks");
    vXLWorkbook = vXLWorkbooks.OleFunction("Open", vFileName, vNotUsed,
    vNotUsed, vNotUsed);
    vWorksheet = vXLWorkbook.OlePropertyGet("Worksheets", 1);
    Sleep(1000);
     // ici le fichier Excel est charge
     // on va recuperer le Handle de la fenetre ainsi que celui de la barre de menus
    HWND h = FindWindow("XLMAIN", NULL);
    HWND h1 = FindWindowEx(h, NULL, "EXCEL2", NULL);
    HWND h2 = FindWindowEx(h1, NULL, "MsoCommandBar", "Barre de menus Feuille de calcul");
     // on selectionne la Barre de menus
    SetForegroundWindow(h2);
     // on active le premier element de la Barre de menus pour cela on simule "Alt"
        keybd_event(VK_MENU,0,0,0);
        keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
    Sleep(50);
    for (int i = 1; i <= 6; i++)
            {
     // on simule la fleche vers le bas pour derouler le menu selectionne
       PostMessage(h2, WM_KEYDOWN, VK_DOWN, 0); // touche enfoncee
       PostMessage(h2, WM_KEYUP, VK_DOWN, 0); // touche relachee
            }
     // on simule la touche entree pour afficher la boite de dialogue
       PostMessage(h2, WM_KEYDOWN, VK_RETURN, 0); // touche enfoncee
       PostMessage(h2, WM_KEYUP, VK_RETURN, 0); // touche relachee
    Sleep(50);
     // ici la boite de dialogue ouvrir est affichee
     // on recupere le Handle de la boite de dialogue
    //HWND h3 = FindWindowEx(h2, NULL, "bosa_sdm_XL9", "Enregistrer");
    //HWND h3 = FindWindowEx(h2, NULL, "bosa_sdm_XL9", "Enregistrer sous");
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    // on ferme le dossier
    //vXLWorkbook.OleProcedure("Close", false);
    // fermeture d'excel
    vMSExcel.OleFunction("Quit");
    // liberation memoire
    vMSExcel = Unassigned;
    }
    //---------------------------------------------------------------------------
    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
     
    //---------------------------------------------------------------------------
    #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;
            void __fastcall Button1Click(TObject *Sender);
    private: // User declarations
    public:  // User declarations
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    Qu'en pensez vous
    Le code a ete teste sur Windows XP pro pack2 AMD3000+ Excel 2003
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Bon comme il ny a pas de critiques je suppose que le programme marche
    et un petit resolu
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

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

Discussions similaires

  1. [C#] Boîte de dialogue "Enregistrer sous"
    Par TmDsbsBs dans le forum ASP.NET
    Réponses: 22
    Dernier message: 31/10/2013, 17h55
  2. [XL-2010] sauvegarder un classeur/via la boite de dialogue Enregistrer sous
    Par cylap dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 22/02/2012, 10h27
  3. Problème avec boite de dialogue enregistrer sous
    Par biddal dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/08/2011, 10h58
  4. Réponses: 0
    Dernier message: 26/05/2009, 22h23
  5. Réponses: 1
    Dernier message: 15/06/2007, 17h35

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