2010-09-20 4 views
3

Quel est le moyen le plus simple et le plus efficace de supprimer une page spécifique d'un objet Document à l'aide des bibliothèques Word Interop?Interop Word - Supprimer une page du document

J'ai remarqué qu'il existe une propriété Pages qui étend/implémente IEnumerable. Peut-on simplement supprimer les éléments du tableau et les pages seront retirées du document?

J'ai également vu les exemples de gammes et de sections, mais ils ne sont pas très élégants à utiliser.

Merci.

+1

Il est logique que Microsoft n'utilise pas les pages en tant que telles en raison des différentes dispositions/vues qu'un document Word peut avoir. J'espère juste qu'il y a un moyen plus facile que d'avoir à utiliser les gammes. – Koekiebox

+0

Je sais qu'il n'utilise pas Interop, mais ces gars-là ont de belles bibliothèques pour ce qui précède: http://www.aspose.com/categories/java-components/default.aspx – Koekiebox

Répondre

4

Une option possible est de mettre en signet les pages entières (Sélectionnez la page, cliquez sur Outils | Insérer un signet puis tapez un nom). Vous pouvez ensuite utiliser la collection Bookmarks de l'objet Document pour faire référence au texte et le supprimer.

Sinon, essayez le C# équivalent de ce code:

Doc.ActiveWindow.Selection.GoTo wdPage, PageNumber 
Doc.Bookmarks("\Page").Range.Text = "" 

La première ligne se déplace le curseur à la page "PageNumber". La seconde utilise un signet prédéfini qui fait toujours référence à la page sur laquelle se trouve le curseur, y compris le saut de page à la fin de la page s'il existe.

+0

En note, j'ai trouvé Range.Text = "" être plus fiable que Range.Delete car le premier ne semble pas être affecté par l'option "couper et coller". – Foole

+0

Je vois qu'il y a une fonction Delete() sur le signet lui-même. Est-il possible d'utiliser Delete() sur le signet \ Page pour supprimer cette page? – Koekiebox

+0

Non. Cela va tenter de supprimer le signet lui-même, ce qui provoquera l'erreur d'exécution '5827': Les signets prédéfinis ne peuvent pas être modifiés. – Foole

3

La réponse courte à votre question est qu'il n'y a pas élégante façon de faire ce que vous essayez d'atteindre. Word sépare fortement le contenu d'un document de sa mise en page. En ce qui concerne Word, un document n'a pas de pages; plutôt, les pages sont quelque chose dérivé d'un document en le visualisant d'une certaine manière (par exemple une vue d'impression). La collection Pages appartient à l'interface Pane (accessible, par exemple, par Application.ActiveWindow.ActivePane), qui contrôle la disposition. Par conséquent, il n'y a aucune méthode sur Page qui vous permet de modifier (ou supprimer) le contenu qui mène à l'existence de la page.

Si vous contrôlez le (s) document (s) que vous traitez dans votre code, je vous suggère de définir des sections dans le document qui représentent les parties que vous voulez supprimer par programmation. Les sections sont une meilleure construction car elles représentent le contenu, pas la mise en page (une section peut, à son tour, contenir des sauts de page). Si vous deviez le faire, vous pouvez utiliser le code suivant pour supprimer une section spécifique:

object missing = Type.Missing; 
foreach (Microsoft.Office.Interop.Word.Section section in doc.Sections) { 
    if (/* some criteria */) { 
     section.Range.Delete(ref missing, ref missing); 
     break; 
    } 
} 
Questions connexes