Frage
Wir manipulieren unsere Word 2007 -Dokumente von .NET mit Word Interop. Meistens Dinge mit Feldern wie in:
For Each f In d.Fields
f.Select()
//do stuff with fields here
Next
Dies lässt das letzte Feld im ausgewählten Dokument zurück.
Für die Ordentlichkeit möchten wir also den Cursor am Cursor positionieren Ende des Dokuments (oder sogar der Anfang wäre ok).
Wenn ich nach der Antwort googeln, gibt es nicht viel ... das nächste, das ich bekommen kann, scheint vorzuschlagen, dass wir uns mit Bereichen oder Lesezeichen einbeziehen müssen. Da ist ein GoTo
Methode für die Document
Objekt aber keines der WdGoToItem
Optionen, die es bietet, sind nützlich.
Gibt es keine einfache Möglichkeit, den Cursor nur an das Ende (oder den Start) des Dokuments zu senden?
Bearbeiten
Ein Teil meines Problems war, dass ich das letzte Feld nicht mochte, ausgewählt zu lassen. Habe jetzt erkannt, dass ich tun kann
f.Unlink
um das zu entfernen mergefield
Und lassen Sie den Feldtext dort einfach als einfacher Text. Welches ist ein ordentlicher, ob wir auch den Cursor neu positionieren oder nicht
Lösung
@Alexander Kojevnikov: Danke für deine Hilfe, weil du mich auf den richtigen Weg gebracht hast. Ich stellte jedoch fest, dass ich das .goto auf das Wortauswahlobjekt anwenden musste, nicht auf das Dokument. Wie in:
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)
Andere Tipps
So sieht es in C#aus:
object missing = Missing.Value;
object what = Word.WdGoToItem.wdGoToLine;
object which = Word.WdGoToDirection.wdGoToLast;
doc.GoTo(ref what, ref which, ref missing, ref missing);
Ich denke, es wird in VB.NET noch einfacher sein, da es optionale Parameter unterstützt.
Ich bin mir nicht sicher, ob ich die gleiche Umgebung wie Sie benutze, sondern um zum Gehen zu gehen Anfang oder Ende des Dokuments hier ist das, was für mich funktioniert:
Private Sub moveCursorToStartOfDocument()
w.Selection.HomeKey(WdUnits.wdStory, Nothing)
End Sub
Private Sub moveCursorToEndOfDocument()
w.Selection.EndKey(WdUnits.wdStory, Nothing)
End Sub
Ich verwende Unit Word_tlb in Delphi mit Antragsobjekt- Word.Application
wie folgt:
aWordDoc.Application.Selection.EndKey(wdStory,wdMove);
Im Allgemeinen ist das Ende des Word -Dokuments:
Selection.EndKey( WdUnits.wdStory, WdMovementType.wdMove)
Wenn ich benutze
Selection.GoTo(Word.WdGoToItem.wdGoToLine, Word.WdGoToDirection.wdGoToLast, Nothing, Nothing);
Selection.InsertFile('documnet.docx');
Neue Inhalte wurden vor der letzten Zeile eingefügt.
Der einfachste Weg, um einen Überblick über den tatsächlichen Code herauszufinden, besteht darin, ein Makro in Wort für diese spezifische Aktion aufzuzeichnen. Anschließend können Sie den generierten Code an verschiedene Syntax (en) von VB, VB.NET, C# usw. ändern.
Der folgende Code -Snippet zeigt die Verwendung für eine VB.NET -Anwendung:
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)
Hoffe das hilft.
Um die Cursorposition am Ende des aktuellen Dokuments in einem C# Word-Add-In-VSTO zu ändern:
this.Application.ActiveDocument.Range(
this.Application.ActiveDocument.Content.End-1,
this.Application.ActiveDocument.Content.End-1).Select();
Sehen Wie zu: Programmatisch definieren und auswählen Bereiche in Dokumenten
Versuche dies :
int lNumberOfPages =
_WordDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false);
WordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage,WordApp.WdGoToDirection.wdGoToLast, lNumberOfPages);
Sie können das vordefinierte Lesezeichen verwenden:
EndOfDoc oDoc.Bookmarks.Item("\endofdoc").Range
Andere vordefinierte Lesezeichen:
ActiveDocument.Bookmarks("\Para").Copy "currpara"
https://msdn.microsoft.com/en-us/vba/word-vba/articles/predefined-bookmarks
Für Net Office:
mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();