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

Delphi Discussion :

Pilotage de Word par OLE


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut Pilotage de Word par OLE
    Bonjour.
    Je pilote Word par OLE
    J'ouvre un fichier Word dans lequel je souhaite coller un fichier Excel.
    Mon problème est que je n'arrive pas à coller le contenu du fichier Excel à la fin du fichier Word

    Voici la ligne de code qui me permet de coller le tableau Excel dans Word:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vWDocument.InlineShapes.AddOLEObject('Excel.Sheet.8', 'C:\Testeee.xls');
    La variable vWDocument représente le document en cours. Dans mon fichier Word se trouve déjà du texte. Quand j'exécute ce code, le tableau se met au début du fichier Word. Je ne trouve pas la commande qui me permet de positionner le curseur à la fin du fichier Word pour y coller le tableau Excel.
    Savez vous quelle est cette commande?

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Bonjour,

    Voiçi une routine qui fait faire un saut vers la fin du fichier Word :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Const wdGoToLine = 3;
        Const wdGoToLast = -1;
     
        Procedure AllerEnFinDuFichier(Var InstanceDeWord : Variant);
        begin
             InstanceDeWord.Selection.GoTo(wdGotoLine,wdGoToLast);
        end;
    Pour plus de détails récupérer PiloterWord.zip chez :
    Auteur : Firejocker (Jean-Baptiste Demonte)
    Site : http://www.firejocker.com (en cours de dev a ce jour)
    Mirroir : www.phidels.com
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut ça ne marche pas...
    Ca ne marche pas...
    En fait ton code semble trés bien marcher. C'est à dire que quand je rends Word visible, avec ton code le curseur se trouve bien à la fin du fichier. Quand je ne mets pas ton code, le curseur se trouve au début du fichier.
    Le problème est que lorsque j'exécute cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vWDocument.InlineShapes.AddOLEObject('Excel.Sheet.8', 'C:\Testeee.xls');
    Le fichier Excel que j'insère dans Word se place AU DEBUT du fichier. Je ne comprends pas pourquoi. J'ai vu dans l'aide de Word que le dernier paramètre de la fonction sert à spécifier le Range où l'on va placer l'objet. Je ne sais pas comment définir un Range, de sorte qu'il représente la fin de mon fichier Word. Des idées?

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Re-Salut,

    Puisque le curseur s'est bien placé à la fin du document, c'est qu'on a avancé vu qu'il marque l'emplacement où tous les ajouts et les insertions s'effectuent en principe.

    Pour ce qui du aramètre Range, il se trouve effectivement qu'il intervent justement dans pas mal de fonctions d'ajout ou d'insertion, exemples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Pour insérer le numero de page en champ automatique
        procedure InsertionAutoNumPage(InstanceDeWord : variant);
        begin
            InstanceDeWord.Selection.fields.add(Range:=InstanceDeWord.Selection.Range, Type:=wdFieldPage);
        end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Pour créer un nouveau tableau à l'emplacement du curseur
        procedure CreerTableau(Var InstanceDeWord, Document : Variant; NombreDeLigne,NombreDeColonne : Integer);
        begin
                  Document.Tables.add(InstanceDeWord.selection.Range,NombreDeLigne,NombreDeColonne);
        end;
    C'est certainement d'une façon similaire qu'il faut spécifier le Range où l'on va placer l'objet avec AddOLEObject.
    En tous cas j'y ai découvert qu'avec vWDocument.InlineShapes.AddOLEObject('Excel.Sheet.8', 'C:\Testeee.xls'); on arrive même à insérer un sheet d'un fichier *.xls ce qui évite d'avoir à le re-créer étape par étape par pilotage de Word.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre confirmé
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Par défaut Il y a plus de paramètres
    En fait il faut appeler les paramètres de la fonction AddOLEObject avec tous ses paramètres, et EmptyParam si tu veux les skipper.

    J'ai testé ceci (ou doc est mon OLEVariant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       doc.InlineShapes.AddOLEObject('Excel.Sheet.8', 'C:\Test.xls', False, False, EmptyParam, EmptyParam, EmptyParam, doc.Paragraphs.Item(i).Range );
    Et selon la valeur que je donne à i, il me le colle dans le paragraphe i.
    Ca ne doit pas régler tous tes problèmes, mais c'est une piste

    Paul

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Re-Salut,

    selon la valeur que je donne à i, il me le colle dans le paragraphe i.
    Ca ne doit pas régler tous tes problèmes, mais c'est une piste
    Mais puisque ça marche c'est l'essentiel, il suffit donc avant d'insérer le tableau de créer au préalable un paragraphe i+1 en fin du document d'une seule ligne de texte blanc où il le collera sans écraser le texte du paragraph i.

    S'il y a doc.Paragraphs.Item(i) on doit forcément pouvoir une propriété ou une méthode qui fournit le "Count" pour viser le dernier paragraphe "Count-1".

    Ca m'étonnerait que cela ne règle pas son problème.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Pour coller en fin de document, il faut renseigner en Range, le dernier paragraphe qui est
    ActiveDocument.Paragraphs.Count

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Par défaut C'est bon...
    CA MARCHE!
    Merci à tous

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

Discussions similaires

  1. word par ole dans rad studio xe2
    Par yapy00333 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/07/2013, 10h12
  2. Réponses: 4
    Dernier message: 23/03/2010, 18h29
  3. Publipostage Word par OLE avec Office 2003
    Par eureka_05 dans le forum Word
    Réponses: 11
    Dernier message: 14/11/2008, 11h17
  4. pilotage de Word par VB6
    Par noune40 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/03/2008, 19h46
  5. [AUTOMATION WORD]Pilotage Word par Delphi
    Par Sunny dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 05/12/2002, 17h09

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