2009-03-27 6 views
1

J'ai un document Word 2007 dans lequel je veux insérer un document Word existant - tout en préservant l'en-tête/pied de page, les graphiques, les bordures des deux documents. Je le fais en utilisant l'API Word en C#. Cela semble assez simple, je veux dire que vous utilisez la méthode "InsertFile" ... sauf que dans Word 2007, la fonctionnalité "insérer le fichier" est maintenant "insérer le texte à partir du fichier" et c'est juste que - laissant la bordure de page, graphiques et pied de page, etc.Insérer par programme un document Word dans un document existant (Word 2007)

OK, je vais copier et coller le lieu, comme si ...

_Document sourceDocument = wordApplication.Documents.Open(insert the 8 million by ref parameters Word requries) 
sourceDocument.Activate(); // This is the document I am copying from 
wordApplication.Selection.WholeStory(); 
wordApplication.Selection.Copy(); 
targetDocument.Activate(); // This is the document I am pasting into 
wordApplication.Selection.InsertBreak(wdSectionBreakNextPage); 
Selection.PasteAndFormat(wdFormatOriginalFormatting); 
wordApplication.Selection.InsertBreak(wdSectionBreakNextPage); 

qui fait ce que vous attendez, prend le document source , sélectionne tout, le copie puis le colle dans le document cible. Parce que j'ai ajouté un saut de section avant de faire le collage, il conserve également les bordures, en-tête/pied de page des deux documents.

Cependant - maintenant c'est où j'ai le problème. La pâte seulement inclut les bordures, l'en-tête etc si je colle au fin du document cible. Si je le colle au milieu - bien qu'il y ait un saut de section précédent, alors seulement le texte est collé et l'en-tête et les bordures etc. sont perdus.

+0

Si vous allez la route OpenXML est du tout une option, consultez http://blogs.msdn.com/brian_jones/archive/2010/02/26/open-xml-sdk-office-services-better -together.aspx et la section ** Fusion de plusieurs documents Word ** ici http://msdn.microsoft.com/en-us/library/dd469465.aspx – R0MANARMY

Répondre

1

La fonctionnalité de signet fonctionnerait-elle? Le fichier InsertFile contient des paramètres à partir de ce qui peut contourner le problème. Vous avez peut-être considéré cela déjà bien

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.bookmark.insertfile.aspx

+0

Merci pour la suggestion - je n'ai pas essayé InsertFile.J'essaie maintenant de le faire mais j'ai du mal à le faire fonctionner ... –

+0

Je ne pense pas que ce soit possible, parce que je ne fais pas d'application VSTO au niveau du document, je n'ai pas accès à une collection de contrôle pour exemple que l'objet signet semble exiger. –

+0

Dommage, probablement pas d'aide, mais un exemple de ce qui précède peut être trouvé ici http://devpinoy.org/blogs/keithrull/archive/2007/05/23/how-to-merge-multiple-microsoft-word -documents-in-c.aspx – Matrim

0

Je travaille actuellement sur quelque chose de similaire au moment étrangement et a trouvé une bibliothèque cmdlet PowerShell écrit en C# que vous pourriez trouver utiles:

Powertools for Open XML

Il est encore un peu bogué avec les en-têtes et les pieds de page hérités ainsi que les références d'image qui ne sont pas copiées correctement si la même image se trouve dans plusieurs parties du document, mais une grande partie de la structure est en place.

+0

Merci de m'avoir informé, ça me donne un autre avenue pour résoudre ces problèmes de bureau. –

-2

insérer un document Word 2007 DANS UN AUTRE DOCUMENT DE MOT La seule façon que j'ai trouvé avec succès pour Word 2007 est ... ouvrir le document que vous souhaitez ajouter les pages, puis sur l'onglet goto « Insertion » sur le ruban, regardez la section "texte" (même endroit que la zone de texte, le mot art, etc.) et sélectionnez "objet", un menu déroulant apparaît, puis sélectionnez "Texte à partir du fichier". De là, vous sélectionnez simplement le document que vous souhaitez insérer et c'est fait, vous devrez peut-être faire un léger ajustement, mais si tout est correctement formaté, assurez-vous de placer votre curseur au point où vous voulez insérer le nouveau. Espérons que cela aide

+0

nous parlons de le faire par programme .... – user20358

0

Ce genre de travaillé pour moi. Toujours à la recherche d'une meilleure solution. Assurez-vous d'ajouter votre référence à Interop.Word. Je sais que c'est un vieux fil de discussion et j'utilise Word 2016 mais j'ai cherché longtemps et j'ai dû assembler la solution ensemble.

using Word = Microsoft.Office.Interop.Word; 
var wordApp = new Word.Application(); 
wordApp.Visible = true; 
wordApp.Documents.Add(@"C:\workingtemplate.dotx"); 
//Open is for an existing document. 
//Add is to use a template. 
//Get the range to be able to then collapse and have the correct insertion point 
var rng = wordApp.ActiveDocument.Range(); 
rng.Collapse(Word.WdCollapseDirection.wdCollapseEnd); 
rng.InsertBreak(Word.WdBreakType.wdPageBreak); 
rng.InsertFile(@"C:\temp.docx"); 
Questions connexes