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 fermeture fichier Excel


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut c++ builder fermeture fichier Excel
    Bonjour,


    Je cherche depuis des heures une commande qui me permet tout simplement de fermer un fichier ouvert en Excel en appuyant sur un bouton.
    L'utilisateur ne doit pas choisir le nom du fichier à fermer, le nom du fichier est encodé en dur dans le code source. (result.xls)
    J'ai essayé FileClose sans succès.
    Quelqu'un peut-il m'aider svp?

    J'ai ouvert ce fichier à l'écran avec :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    ShellExecute (Sender, "open", "result.xls", 0, 0, SW_SHOWNORMAL);

    Je voudrais simplement le fermer.
    Existe t'il une ligne magique qui permet de faire cela.
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Avec Excel lancé comme ça, non, il n'y a pas de formule magique. Je ne vois aucune façon (hors Windows Vista) de retrouver à coup sûr la fenêtre d'un Excel lancé avec ShellExecute() ou ShellExecuteEx() pour la fermer automatiquement.

    La seule solution que je vois, c'est de forcer le lancement par Excel avec CreateProcess(), car là on a l'ID du process, qui permet de retrouver toute fenêtre lui appartenant (via les fonctions EnumWindows() et GetWindowThreadProcessId()).
    Sinon, tu peux piloter Excel par OLE, mais c'est toute une autre histoire sur laquelle je suis incapable de t'aider...

    PS: Il n'y a pas de fonction FileClose() dans l'API Windows...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 4
    Par défaut
    Merci pour la réponse!


    Si j'utilise :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int iFileHandle;
    iFileHandle = FileCreate("result.xls");

    Je crée le fichier Excel et j'ai son Handle.

    Comment arriver à ouvrir et fermer ce fichier Excel à l'écran?

    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    C'est pas une question de handle de fichier, c'est une question de processus.
    Ce n'est pas le fichier qu'il faut fermer, car "on" ne l'ouvre pas: C'est Excel qu'il faut fermer, et pour ça son ID de processus est nécessaire, sauf pour tuer le processus de la façon la plus sale et la plus sanglante possible sous Windows (auquel cas seul un handle de processus est nécessaire, et ce handle peut être obtenu avec ShellExecuteEx()).

    (Et FileCreate() ne fait pas non plus partie de l'API Windows. Ça vient de Borland?)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 55
    Par défaut
    j'etais pas si a coté de la plaque que ca Medinoc

    sur une appli MFC chez moi sous visual 6 ca tourne impec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // j'ouvre le fichier 
    void CDlgDlg::OnOK() 
    {
     ShellExecute(this->GetSafeHwnd(),NULL,"C:\\result.xls",0,0,SW_SHOWNORMAL);
    }
    //ici je ferme la fenetre et le fichier
    void CDlgDlg::OnButton1() 
    {
    HWND exc = ::FindWindow(0,"Microsoft Excel - result.xls");
    ::SendMessage(exc,WM_CLOSE,0,0);
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Mais là, si tu as deux Microsoft Excel qui ouvrent chacun deux "result.xls" différents (qui peuvent être n'importe où), tu n'as aucun moyen de savoir lequel ça va fermer.

    Et au fait, le premier paramètre de FindWindow() doit être NULL, pas 0 (même si en C++ ça ne change rien, c'est plus lisible car plus explicite).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 55
    Par défaut
    tu ne peux pas ouvrir deux fenetres avec le meme nom!
    Windows te dira que tu as deja une fenetre portant le meme nom qui existe et que tu ne peux pas en avoir une 2e meme si les fichiers sont a des endroits differents

    et pour le 0 c'est parce que j'avais un peu la feneantise d'ecrire NULL lol mais tu as raison c'est plus explicite.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Citation Envoyé par Rits
    tu ne peux pas ouvrir deux fenetres avec le meme nom!
    Windows te dira que tu as deja une fenetre portant le meme nom qui existe et que tu ne peux pas en avoir une 2e meme si les fichiers sont a des endroits differents

    Quand l'ai lu ça, je me suis d'abord écroulé de rire sur mon clavier...
    Mais le pire, c'est que j'ai testé, et c'est vrai...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 55
    Par défaut
    lol
    tu as du te dire quel boulet celui la

    c'est pour ca que la methode FindWindow prend un nom de fenetre car il est unique

    ya plein de truc comme comme par exemple ouvre notepad et essai de creer un fichier con.txt!
    ca m'est arrivé une fois ou pour debugeur un prog qui s'executer sur serveur donc j'ai voulu loggué les erreurs dans un fichier que j'ai appelé con.txt.....j'ai jamais pu creer ce fichier lol !

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Ah, intéressant.
    Ça marche avec tous les noms DOS de prériphériques (con, com1, lpt1...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre éclairé Avatar de Fred2209
    Inscrit en
    Octobre 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 310
    Par défaut
    J'ai testé la petite application de Rits, sous Borland ça marche nickel mais un petit détail... Comment tester si le fichier est bien ouvert ou non avant de le fermer ???

Discussions similaires

  1. Msgbox 3 boutons avant fermeture fichier excel
    Par delphinep dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/07/2010, 23h21
  2. Fermeture fichier Excel déjà ouvert via Access
    Par Jaymerry dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/07/2008, 08h27
  3. Fermeture fichier excel en vba
    Par avyrex dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/11/2006, 21h30
  4. Attendre fermeture fichier Excel
    Par tedparker dans le forum Access
    Réponses: 7
    Dernier message: 01/09/2006, 14h27
  5. Fermeture Fichier Excel
    Par beurnoir dans le forum Access
    Réponses: 22
    Dernier message: 28/10/2005, 16h22

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