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 :

Creation fichier word et intégration d'images


Sujet :

C++Builder

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    hum,
    désolé de demander encore
    mais je galère un peu pour positionner mes images sur la feuille
    En effet elles se superposent toutes sur la page initiale, si je ne fais que les ajouter.
    Si ensuite j'insère un saut de page ou des lignes, elles se positionnent toutes les unes sur les autres sur la dernière page.

    J ai trouvé une solution mais ca ne fonctionne pas à tous les coups donc je voulais savoir si quelqu'un avait mieux :
    ce que je fais :

    j ajoute des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     // Il faut passer l'instance de Word et non celle du document
     
        int i;
        i = 0;
     
        for ( i; i < 5; i++)
        {
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeParagraph");
        }
    je commence par insérer ma derniere image
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           vFileName = "C:\\4.jpg";
     
         shpCanvas =  vWDocument.OlePropertyGet("Shapes").OleFunction("AddCanvas", 1, 601, 600, 800); // AddCanvas, left, top, width, height
     
    // attention au Canvas et image ils doivent correspondre au niveau des dimensions
    // sinon on a le droit a une exception totalement inexplicite
     
    shpCanvas.OlePropertyGet("CanvasItems").OleFunction("AddPicture", vFileName, false, true, 1, 601, 599, 799); //  AddPicture, FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height
    je remonte via le deplacement suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        // déplacement vers le haut
        vMSWord.OlePropertyGet("Selection").OleFunction("MoveUp", 5, 1);
    j'insère une autre image
    et ainsi de suite
    mais au bout de deux images il me met une erreur pas du tout explicite

  2. #22
    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
    Alors pour commencer, a ma connaissance il n'y a pas de documentation OleWord, et la FAQ est je pense la plus complete qui existe.
    Pour les options il faut faire des essais avec l'editeur automatique de macro Word.
    Pour le dernier post je n'ai pas encore regarde, des que j'ai une solution je post

  3. #23
    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
    Voici une solution, je suis parti de ta demande du premier poste une image par page, donc il faut creer le nombre de page que tu souhaite puis inserer chaque image dans la page concernee
    le 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Variant shpCanvas, vFileName;
    vFileName = "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\Grue_Atelierxx.jpg";
     
    // on cree trois pages
    vMSWord.OlePropertyGet("Selection").OleProcedure("InsertBreak", 7);
    vMSWord.OlePropertyGet("Selection").OleProcedure("InsertBreak", 7);
    vMSWord.OlePropertyGet("Selection").OleProcedure("InsertBreak", 7);
     
    // on se place sur la premiere page
    vMSWord.OlePropertyGet("Selection").OleProcedure("HomeKey", "6");
     
    // on insere la premiere image
    shpCanvas =  vWDocument.OlePropertyGet("Shapes").OleFunction("AddCanvas", 0, 0, 600, 800); // AddCanvas, left, top, width, height
    // attention au Canvas et image ils doivent correspondre au niveau des dimensions
    // sinon on a le droit a une exception totalement inexplicite
    shpCanvas.OlePropertyGet("CanvasItems").OleFunction("AddPicture", vFileName, false, true, 1, 1, 599, 799); //  AddPicture, FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height
     
    // on se place sur la page suivante
    vMSWord.OlePropertyGet("Selection").OleProcedure("Goto", 1, 2, 1);
     
    // on insere l'image suivante
    shpCanvas =  vWDocument.OlePropertyGet("Shapes").OleFunction("AddCanvas", 0, 0, 600, 800); // AddCanvas, left, top, width, height
    // attention au Canvas et image ils doivent correspondre au niveau des dimensions
    // sinon on a le droit a une exception totalement inexplicite
    shpCanvas.OlePropertyGet("CanvasItems").OleFunction("AddPicture", vFileName, false, true, 1, 1, 599, 799); //  AddPicture, FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height
     
    // on se place sur la page suivante
    vMSWord.OlePropertyGet("Selection").OleProcedure("Goto", 1, 2, 1);
     
    // on insere l'image suivante
    shpCanvas =  vWDocument.OlePropertyGet("Shapes").OleFunction("AddCanvas", 0, 0, 600, 800); // AddCanvas, left, top, width, height
    // attention au Canvas et image ils doivent correspondre au niveau des dimensions
    // sinon on a le droit a une exception totalement inexplicite
    shpCanvas.OlePropertyGet("CanvasItems").OleFunction("AddPicture", vFileName, false, true, 1, 1, 599, 799); //  AddPicture, FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height
    Pour les testes le code n'est absolument pas obtimise, a toi de jouer

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    cela fonctionne du tonnerre !
    Merci chef
    j avais essayé avec les changements de page mais je m'etais trompé dans la syntaxe
    je suis pas tres doué

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    Ca marche impec quand je rentre les chemins à la main
    mais j'ai essayé de bouclé ca pour qu'il compte le nombre de fichiers jpg que j ai dans un répertoire puis qu'il les mette dans mon word.
    Donc je me suis servi de la faq pour compter le nombre de fichiers ce qui fonctionne plutot bien.
    J ai dans une listbox les adresses mais elles sont erronés.
    Il me retourne bien le nom de l'image jpg : 2.jpg
    mais le chemin n'est pas bon.
    En effet le chemin affiche dans la listbox est :
    c:\Documents and settings\GX\Bureau\projet word c++\1.jpg
    alors que l'adresse réelle de mon image est C:\test\1.jpg

    Quand je place mon Projectword.exe dans le dossier test, les adresses sont bonnes mais lors de l'ajout des images dans mon fichier word il me met une erreur : "Type de variable incorrect" alors qu'à la compilation pas d'erreur.

    Voici le code :

    Déclarations
    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
     
    void __fastcall TForm1::Search(AnsiString FilePath, TStringList * Extensions, TStrings * ListeFichiers)
    {
      int i;
      TSearchRec Infos_fichier;
      if (!FindFirst(FilePath+"*.*", faAnyFile, Infos_fichier))
     
      do
      {
        for ( i = 0 ; i < Extensions->Count ; i++)
        {
          if (ExtractFileExt(Infos_fichier.Name).LowerCase() == Extensions->Strings[i].LowerCase())
          {
            ListeFichiers->Add(ExpandFileName(Infos_fichier.Name));
          }
        }
      }
      while(!FindNext(Infos_fichier));
     
       ShowMessage(i);
      FindClose(Infos_fichier);
    }
    programme principal
    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
    74
    75
    76
    77
    78
    79
    80
     
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       int j;
     
    //Dans un premier temps, on compte et on liste les fichiers de type jpg qui se trouvent dans c:\Test
      TStringList *Extensions = new TStringList; // On construit la liste des extensions
      Extensions->Add(".jpg");
      // Appel à notre méthode, avec pour liste des fichiers, les items de la ListBox.
      Search("C:\\test\\", Extensions, ListBox1->Items);
      delete Extensions;
     
      j =  ListBox1->Items->Count;
      ShowMessage(j);
     
    //Le compte est bon
     
     
     
     
    //Creation du fichier word et ouverture
     
        Variant vWDocuments, vWDocument;
        Variant vMSWord;
        try
            {
    //    vMSWord = Variant::GetActiveObject("Word.Application");
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
    vMSWord.OlePropertySet("Visible", true);
     
    vWDocuments = vMSWord.OlePropertyGet("Documents");
    vWDocument = vWDocuments.OleFunction("Add") ;
     
    //word s ouvre correctement
     
    Variant shpCanvas, vFileName;
     
    int i;
    // on cree n pages correspondant aux nombres d'images
    for ( i = 0 ; i < j ; i++)
       vMSWord.OlePropertyGet("Selection").OleProcedure("InsertBreak", 7);
     
    // les n pages sont bien crées
     
     
    // on se place sur la premiere page
    vMSWord.OlePropertyGet("Selection").OleProcedure("HomeKey", "6");
     
    for ( i = 1 ; i < (j+1) ; i++)
    {
      AnsiString temp;
      temp = ListBox1->Items->Strings[i];
     vFileName = temp;
     ShowMessage(vFileName);
    // l'adresse affichée correspondant au nom de l'executable + nom du fichier jpg :/
    // on ne boucle qu'une fois et l erreur se produit
    shpCanvas =  vWDocument.OlePropertyGet("Shapes").OleFunction("AddCanvas", 0, 0, 600, 800); // AddCanvas, left, top, width, height
    // attention au Canvas et image ils doivent correspondre au niveau des dimensions
    // sinon on a le droit a une exception totalement inexplicite
    shpCanvas.OlePropertyGet("CanvasItems").OleFunction("AddPicture", vFileName, false, true, 1, 1, 599, 799); //  AddPicture, FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height
     
    // on se place sur la page suivante
    vMSWord.OlePropertyGet("Selection").OleProcedure("Goto", 1, 2, 1);
     
     }
     
     
        vFileName = "c:\\book1.doc";
        vWDocument.OleProcedure("Saveas", vFileName);
     
         vMSWord.OleFunction("Quit");
    vMSWord = Unassigned;
     
    }

    Merci d'avance pour l'aide

  6. #26
    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
    Deja une chose les AnsiString et Ole ne font pas bon menage donc " AnsiString " a bannir
    vFileName = ListBox1->Items->Strings[i];
    ensuite tu sera peut etre oblige d'ecrire comme ceci le Variant " vFileName "
    shpCanvas.OlePropertyGet("CanvasItems").OleFunction("AddPicture", WideString(vFileName), false, true, 1, 1, 599, 799);
    et pour finir les chemins doivent etre ecrit comme ceci
    c:\\Documents and settings\\GX\\Bureau\\projet word c++\\1.jpg
    il faut doubler le " \ "

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    Merci beaucoup, on touche au but, j'ai bientôt fini de t'embêter

    Effectivement avec le WideString(vFileName) ça fonctionne.


    J'arrive donc à générer mon fichier doc avec toutes mes images de type jpg ou png ou autre selon mes souhaits.

    Mais par conte je suis mal exprimé pour l'autre question.
    En fait, mon projet est localisé sur le bureau, à l'adresse :
    c:\Documents and settings\GX\Bureau\projet word c++\project2.bpr

    Mais mes images sont localisés à l'adresse suivante : C:\Temp
    Ma première partie de code recherche bien les images à cet endroit mais les affichent dans ma listbox avec l'adresse suivante :
    c:\Documents and settings\GX\Bureau\projet word c++\1.jpg
    c:\Documents and settings\GX\Bureau\projet word c++\2.jpg
    c:\Documents and settings\GX\Bureau\projet word c++\3.jpg

    alors qu'elles sont localisés dans C:\temp\

    Et ensuite quand je vais mettre les fichiers jpg dans mon doc, il se sert des adresses de la listbox, donc es mauvaises adresses :
    c:\Documents and settings\GX\Bureau\projet word c++\1.jpg
    c:\Documents and settings\GX\Bureau\projet word c++\2.jpg
    c:\Documents and settings\GX\Bureau\projet word c++\3.jpg

    Pour pallier à cette erreur, j'ai donc copié toutes mes images dans le fichier
    c:\Documents and settings\GX\Bureau\projet word c++\3.jpg
    mais bon j'ai un problème quand même.
    Je me suis peut-etre mal exprimé, n'hésitez pas si vous voulez d'autres renseignements.

    Merci d'avance pour votre aide.

  8. #28
    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
    A tu verifie en mode pas a pas que ton code ne modifie pas ton chemin quand tu recupere tes image

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    J'ai contourné le problème en remplacant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            ListeFichiers->Add(ExpandFileName(Infos_fichier.Name));
    par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            ListeFichiers->Add(FilePath+Infos_fichier.Name);
    Quand je lance ma commande via le dos pour convertir mes images :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cmd = "convert -enhance -quality 144 " + Input + " " + File + "00.jpg" ;
    ShowMessage(cmd);
    system(cmd.c_str());
    Cette commande fonctionne très bien quand je la fait dans le dos directement mais quand je passe par mon executable, il n'arrive plus à gérer les espaces dans mes chemins de répertoire.
    En effet Input renvoi a un chemin de fichiers de la sorte
    L:\Nom Prenom Numero\rapport.pdf
    Et j'ai donc l'erreur :
    convert: unable to open image 'Nom' : No such file or directory ...

    Je regarde sur la toile cette après-midi.

  10. #30
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    J'ai trouvé une manière de faire qui fonctionne
    La faq disait de mettre entre guillemets mais sans succès ;
    donc j'ai utilisé la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     File = ExtractShortPathName(File);
     
     input2 = ExtractShortPathName(Input);
     
     cmd = "convert -enhance -quality 144 " + input2 + " " + File + "00.jpg" ;
    et ca fonctionne parfaitement

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Par défaut
    Voila dernier point sur lequel j ai bloqué mais en relisant ce que tu avais écrit j ai finalement réussi
    Output2 est un ansistring et peut etre grace a cette procédure gérer par le système Ole sans poser de conflits.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        vFileName = WideString(Output2.c_str());
    Mon code fonctionne bien maintenant
    Il permet de convertir facilement des pdf en doc sans logiciel payant.

    Merci beaucoup blondelle pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. problème creation fichier word c#
    Par zone45 dans le forum Développement Windows
    Réponses: 0
    Dernier message: 18/06/2014, 14h00
  2. [XL-2003] creation fichier word en texte sous vba excel
    Par pulco41 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/01/2011, 16h00
  3. creation fichier word en texte sous vba excel
    Par pulco41 dans le forum Word
    Réponses: 6
    Dernier message: 06/01/2011, 15h37
  4. Réponses: 10
    Dernier message: 17/08/2007, 09h38
  5. Extraire les images contenues dans un fichier word
    Par elreybubu dans le forum Delphi
    Réponses: 2
    Dernier message: 25/10/2006, 13h07

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