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 :

OLE Excel - Problème d'enregistrement


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [Résolu] OLE Excel - Problème d'enregistrement
    Bonjour,

    J'ai actuellement un problème pour l'enregistrement d'un fichier Excel (sous un autre nom), en essayant de récupérer une application Excel déja ouverte.

    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
    Variant Wb, vMSExcel, vFileName;
    AnsiString FileName;
     
    FileName = Form3->SaveAs->Text;
    vFileName = ExtractFilePath(Application->ExeName)+ "Sauvegardes\\" + FileName;
     
    vMSExcel = Variant::GetActiveObject("Excel.Application");
    vMSExcel.PS("DisplayAlerts", false);
    try
    {
             Wb = vMSExcel.OlePropertyGet("ActiveWorkBook");
             Wb.OleProcedure("Saveas", vFileName);
            ShowMessage("Le fichier a été correctement enregistré sous: " + vFileName);
    }
    catch (Exception &exception)
    {
           Application->MessageBox("Impossible d'enregistrer!!", "Erreur", MB_OK+MB_ICONERROR);
    }
    J'ai bien inclus au début du fichier: #include <utilcls.h>

    D'avance, je vous remercie.

  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
    Salut thithi54:
    Je pense que ceci va te permettre de resoudre ton probleme
    Variants FileFormat, Mot_passe, Password, WriteResPassword, ReadOnlyRecommended;
    Variants vFileName, CreateBackup, Nom_Du_Fichier;
    FileFormat peut prendre differentes valeurs suivant le format de sauvegarde desire, ce qui
    permet de charger un fichier sous un format et de le sauvegarder sous un autre format
    FileFormat = 6; // fichier CSV (extension .csv)
    FileFormat = -4158; //fichier Texte et separateur tabulation (extension .txt)
    FileFormat = 36; //fichier Texte et separateur espace (extension .prn)
    FileFormat = -4143; // valeur de xlNormal "sauvegarde sous format classeur excel"
    // pour les autres format de sauvegarde faire un essai avec VBE
    tous les parametres de la sauvegarde sont decrits
    Mot_passe = Unassigned; //"Mon_Mot_De_Passe" pour la protection du fichier
    Password = Mot_passe; // mot de passe pour proteger le fichier
    WriteResPassword = Mot_passe; // confirmation du mot de passe
    ReadOnlyRecommended = false; // fichier en lecture seule (False True Unassigned)
    // creation d'une copie si le fichier existe deja
    CreateBackup = false; // creation d'une copie (False True Unassigned)
    Nom_Du_Fichier = le nom du fichier avec extension .csv ou .txt ou.prn ou .xls
    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // sauvegarde du fichier sous le format desire 
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Nom_Du_Fichier";
    vXLWorkbook.OleProcedure("Saveas", vFileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup);
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Re, le problème persiste malgrès les modifications apportées.
    Il n'arrive pas à enregistrer le fichier sous un autre nom (il va dans le catch() et m'affiche donc le message d'erreur.)

    Peux-tu me dire ce que tu mets exactement dans vXLWorkbook ?

    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
     
    Variant vFileName, FileFormat, Mot_passe, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup;
    FileName = Form3->SaveAs->Text;
    vFileName = ExtractFilePath(Application->ExeName)+ "Sauvegardes\\" + FileName;
     
    vMSExcel = Variant::GetActiveObject("Excel.Application");
    vMSExcel.PS("DisplayAlerts", false);
    try
    {
             Wb = vMSExcel.OlePropertyGet("ActiveWorkBook");
             FileFormat = -4143;
             Mot_passe = Unassigned;
             Password = Mot_passe;
             WriteResPassword = Mot_passe;
             ReadOnlyRecommended = false;
             CreateBackup = false;
             Wb.OleProcedure("Saveas", vFileName, FileFormat, Password,                   WriteResPassword, ReadOnlyRecommended, CreateBackup);
             ShowMessage("Le fichier a été correctement enregistré sous: " + vFileName);
    }
    catch (Exception &exception)
    {
             Application->MessageBox("Impossible d'enregistrer !", "Erreur", MB_OK+MB_ICONERROR);
    }
    Merci

  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
    Points : 3 766
    Points
    3 766
    Par défaut
    Peux-tu me dire ce que tu mets exactement dans vXLWorkbook ?
    vXLWorkbook represente le classeur.

    Pour ton probleme essai de coder en dur le chemin
    Variant vFileName = "c:/mon_chemin";
    tu a peut etre un probleme de ce cote la il faut absolument passer les noms de chemin en Variant
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    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
    J'ai teste comme ceci:
    Une Form, deux bouttons
    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
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include <utilcls.h>
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    Variant vMSExcel, vFileName, vXLWorkbooks, vXLWorkbook, vWorksheet, FileFormat;
    //---------------------------------------------------------------------------
    __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);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    // sauvegarde du fichier sous le format desire
    FileFormat = -4143;
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Nouveau dossier\\path1\\path1.xls";
    vXLWorkbook.OleProcedure("Saveas", vFileName, FileFormat);
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci blondelle pour ton aide. L'erreur venait bien du lien.
    Il faut maintenant que je trouve une solution pour remplacer la fonction: ExtractFilePath(Application->ExeName).

    ++

  7. #7
    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
    Salut thithi54:
    Une solution " Variant vFileName = StringToOleStr(FileName); "
    Voir ce poste
    Tu peu essayer aussi " vFileName.c_str() "
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui, merci. J'avais trouvé la deuxième solution.

    Merci encore.

  9. #9
    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
    Si ton probleme est resolu pense a appuyer sur le bouton
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui, merci tout est ok maintenant.
    J'avais déja renommé le titre en [Résolu] mais ca a pas suffit.
    C'est fait.
    Bonne soirée

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

Discussions similaires

  1. Réponses: 27
    Dernier message: 13/02/2013, 14h53
  2. Problème d'enregistrement excel
    Par LCBOXI dans le forum Launchpad (ex-Infoview)
    Réponses: 3
    Dernier message: 15/12/2010, 15h18
  3. Problème d'enregistrement de fichier excel
    Par Black_bird38 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 25/05/2010, 13h08
  4. [WD14] Importation Excel via OLE DB : Problème sur critère date
    Par Genohunter dans le forum WinDev
    Réponses: 2
    Dernier message: 16/09/2009, 18h03
  5. [Excel] Problème d'enregistrement d'un classeur
    Par Geache dans le forum Excel
    Réponses: 3
    Dernier message: 28/03/2006, 20h39

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