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

Était-ce utile?

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top