Positionner le curseur au début / fin de document Word
-
22-09-2019 - |
Question
Nous manipulons nos documents Word 2007 de .Net utilisant Word Interop. faire la plupart des choses avec des champs comme dans:
For Each f In d.Fields
f.Select()
//do stuff with fields here
Next
Cela laisse le dernier champ dans le document sélectionné.
Alors, pour le bien de neatness nous voudrions placer le curseur à la fin du document (ou même le start serait OK).
recherche sur Google pour la réponse ne vomir beaucoup plus ... le plus proche pas que je peux me semble suggérer que nous devons nous impliquer avec des plages ou des signets. Il y a une méthode de GoTo
pour l'objet Document
mais aucune des options de WdGoToItem
qu'il offre sont utiles.
est pas là un moyen simple d'envoyer simplement le curseur à la fin (ou commencer) du document?
Modifier
Une partie de mon problème est que je ne l'ai pas envie de quitter le dernier champ sélectionné. Ont maintenant rendu compte que je peux faire
f.Unlink
pour enlever le mergefield
et juste laisser le texte sur le terrain là-bas en texte brut. Ce qui est plus propre, nous repositionnons aussi si oui ou non le curseur
La solution
@Alexander Kojevnikov: Merci pour votre aide parce que vous me mettre sur la bonne voie. Cependant, je trouve que je devais appliquer le .GoTo à l'objet Selection Word, pas le document. Comme dans:
Dim what As Object = Word.WdGoToItem.wdGoToLine
Dim which As Object = Word.WdGoToDirection.wdGoToLast
//below line had no effect
//d.GoTo(what, which, Nothing, Nothing)
w.Selection.GoTo(what, which, Nothing, Nothing)
Autres conseils
Voici comment il ressemble en C #:
object missing = Missing.Value;
object what = Word.WdGoToItem.wdGoToLine;
object which = Word.WdGoToDirection.wdGoToLast;
doc.GoTo(ref what, ref which, ref missing, ref missing);
Je suppose que ce sera encore plus facile en VB.Net car il prend en charge les paramètres facultatifs.
Je ne suis pas sûr que je suis en utilisant le même environnement que vous, mais pour aller à la start ou end du document est ici ce qui fonctionne pour moi:
Private Sub moveCursorToStartOfDocument()
w.Selection.HomeKey(WdUnits.wdStory, Nothing)
End Sub
Private Sub moveCursorToEndOfDocument()
w.Selection.EndKey(WdUnits.wdStory, Nothing)
End Sub
J'utilise unité Word_TLB en Delphi avec Word.Application de Appliction
comme suit:
aWordDoc.Application.Selection.EndKey(wdStory,wdMove);
généralement fin du document de mot est :
Selection.EndKey( WdUnits.wdStory, WdMovementType.wdMove)
Quand j'utilise
Selection.GoTo(Word.WdGoToItem.wdGoToLine, Word.WdGoToDirection.wdGoToLast, Nothing, Nothing);
Selection.InsertFile('documnet.docx');
du nouveau contenu a été insérer avant la dernière ligne.
La meilleure façon de comprendre les grandes lignes du code réel est d'enregistrer une macro dans Word pour cette action spécifique. Ensuite, vous pouvez modifier le code généré en fonction de syntaxe différente (s) de VB, VB.NET, C #, etc.
L'extrait de code ci-dessous montre l'utilisation d'une application VB.NET:
Imports wordNmSpace = Microsoft.Office.Interop.Word
' Create an object for the application instance
objWord = CreateObject("Word.Application")
' Create a reference of the selection object within Word
objSelection = objWord.Selection
' Now comes the part where you move selection position to the end of document
objSelection.endof(wordNmSpace.WdUnits.wdStory, wordNmSpace.WdMovementType.wdMove)
Hope this helps.
Pour modifier la position du curseur à la fin du document en cours dans un C # mot Ajouter VSTO:
this.Application.ActiveDocument.Range(
this.Application.ActiveDocument.Content.End-1,
this.Application.ActiveDocument.Content.End-1).Select();
Voir Comment: Définir et Programmatically sélectionner des plages dans les documents
Essayez ceci:
int lNumberOfPages =
_WordDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false);
WordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage,WordApp.WdGoToDirection.wdGoToLast, lNumberOfPages);
Vous pouvez utiliser le signet prédéfini:
EndOfDoc oDoc.Bookmarks.Item("\endofdoc").Range
Autres signets prédéfinis:
ActiveDocument.Bookmarks("\Para").Copy "currpara"
https://msdn.microsoft.com / fr-fr / VBA / Word VBA / articles / marque-prédéfinis
pour le bureau net:
mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();