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

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top