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# Discussion :

Concaténer plusieurs documents Word


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut Concaténer plusieurs documents Word
    Bonjour !

    Voilà le problème :
    J'ai un certain nombre (variable) de documents Word de plusieurs pages à regrouper dans un seul fichier Word.

    J'ai essayer la méthode WordDocument.InsertFile(), mais elle supprime le formatage du texte, ce que je ne veux pas :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void InsertFileInDoc( string nomFichier )
    {
    	object endOfDoc = @"\EndOfDoc";
    	Word.Range rng = doc.Bookmarks.Item( ref endOfDoc ).Range;
    	rng.InsertFile( nomFichier, ref missing, ref False, ref False, ref False );
    }

    J'utilise Word2000, donc c'est mort pour le XML ou le travail directement sur le fichier doc (dommage).

    J'ai pensé utiliser les commandes Copy/Paste (de Document ou Application je ne sais plus), mais je crains avoir des problèmes pour les zones de texte incluses dans le document, et pour les pieds de page...

    Si vous avez une solution, elle est la bienvenue
    Merci d'avance !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Alors, voici où j'en suis :

    - Avec une "Selection" :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    object pageBreak = Word.WdBreakType.wdPageBreak;
    Word.Selection select = msWord.Selection;
    select.InsertFile( nomFichier, ref missing, ref False, ref False, ref False );
    select.InsertBreak( ref pageBreak );

    J'obtiens l'erreur :
    "La référence d'objet n'est pas définie à une instance d'un objet."
    - Avec un "Range" :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    object endOfDoc = @"\EndOfDoc";
    Word.Range rng = doc.Bookmarks.Item( ref endOfDoc ).Range;
    rng.InsertFile( nomFichier, ref missing, ref False, ref False, ref False );

    J'obtiens :
    "Le serveur a généré une exception. (Exception de HRESULT : 0X80010105 (RPC_E_SERVERFAULT))".
    De plus, Word reste en tache de fond (malgré le Application.Quit() dans un finally), et tourne avec 60% du processeur.

    - Avec Copy/Paste :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Word._Document docAppend = msWord.Documents.Open(
    	ref convertNomFichier,
    	ref False, ref False, ref False,
    	ref missing, ref missing, ref missing, ref missing,
    	ref missing, ref missing, ref missing, ref missing );
     
    docAppend.Content.Copy();
    doc.Content.Paste();
    docAppend.Close( ref False, ref missing, ref missing );

    Pas d'erreur, ça a l'air de passer même au niveau du formatage, mais je ne sais pas si la technique est très "propre"...


    Un autre petit soucis (moins important) : le nouveau fichier s'ouvre en affichage "Normal" (à la WordPad), au lieu d'un affichage "Page" (feuilles visibles & co). Une idée pour résoudre ça ?

    Merci

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Encore une auto-réponse :

    J'utilise toujours le système du copier/coller, ça a l'air de marcher sans problème : même les pieds de page sont copiés.

    Pour le problème de la vue du document, j'ai trouvé :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    object win = 1;
    doc.Windows.Item( ref win ).View.Type = Word.WdViewType.wdPrintView;

    Mon dernier petit soucis, et je pense que j'aurai fini : j'ai une page vide à la fin du document généré, je ne sais pas encore comment la supprimer sans faire trop de dégats...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Supprimer la dernière page
    Essaie ça, c'est un bout de code que j'ai trouvé par hasard, je ne l'ai pas testé.

    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
    public void AtteindrePage(int NumeroPage)
    {
          object what = (object)WdGoToItem.wdGoToPage;
          object whitch = (object)WdGoToDirection.wdGoToFirst;
          object Numero = (object)NumeroPage;
     
          // Atteindre la page voulue
          _MonRange = _MonDocument.GoTo(ref what, ref whitch, ref Numero, ref oMissing);
     
          // La selectionner
          _MonRange.Select();
    }
     
    public void SupprimePage(int NumeroPage)
    {
          AtteindrePage(NumeroPage);
     
          // Supprime la sélection
          Selection MaSelection = _ApplicationWord.Selection;
          MaSelection.TypeBackspace();
    }
    J'espère que ça sera utile.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/08/2009, 18h00
  2. Réponses: 0
    Dernier message: 22/07/2008, 13h42
  3. Concaténation de documents Word
    Par RapAttak dans le forum Word
    Réponses: 8
    Dernier message: 13/06/2008, 15h48
  4. Réponses: 6
    Dernier message: 11/12/2007, 08h51
  5. Réponses: 40
    Dernier message: 02/12/2007, 16h24

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