Domanda

stanno manipolando i nostri documenti di Word 2007 da Net utilizzando Word Interop. Per lo più facendo cose con campi come in:

For Each f In d.Fields
    f.Select()
    //do stuff with fields here            
Next

Questo lascia l'ultimo campo nel documento selezionato.

Quindi, per il bene di pulizia vorremmo posizionare il cursore sulla fine del documento (o anche il inizio sarebbe OK).

Googling per la risposta non vomitare tanto ... il più vicino che posso ottenere sembra suggerire che dobbiamo impegnarci con le gamme o segnalibri. C'è un metodo GoTo per l'oggetto Document ma nessuna delle opzioni WdGoToItem che offre sono utili.

Non c'è un modo semplice per inviare solo il cursore alla fine (o inizio) del documento?

Modifica

Parte del mio problema era che non mi piaceva lasciando l'ultimo campo selezionato. Ora hanno capito che posso fare

f.Unlink

per rimuovere il mergefield e lasciare solo il testo del campo lì come testo normale. Che è più ordinato, anche se non abbiamo anche riposizionare il cursore

È stato utile?

Soluzione

@Alexander Kojevnikov: Grazie per il vostro aiuto perché mi ha messo sulla strada giusta. Tuttavia ho trovato ho dovuto applicare la .GoTo all'oggetto Word Selection, non il documento. Come 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)

Altri suggerimenti

Questo è come appare in 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);

Credo che sarà ancora più facile in VB.Net in quanto supporta parametri opzionali.

Non sono sicuro che sto utilizzando lo stesso ambiente, come voi, ma per andare al inizio o fine del documento, ecco ciò che funziona per me:

Private Sub moveCursorToStartOfDocument()
    w.Selection.HomeKey(WdUnits.wdStory, Nothing)
End Sub

Private Sub moveCursorToEndOfDocument()
    w.Selection.EndKey(WdUnits.wdStory, Nothing)
End Sub

Io uso unità Word_TLB in Delphi con Appliction agli oggetti Word.Application

come segue:

aWordDoc.Application.Selection.EndKey(wdStory,wdMove);

in genere finiscono di documento di parola è :

Selection.EndKey( WdUnits.wdStory, WdMovementType.wdMove)

Quando uso

Selection.GoTo(Word.WdGoToItem.wdGoToLine, Word.WdGoToDirection.wdGoToLast, Nothing, Nothing);
Selection.InsertFile('documnet.docx');

nuovo contenuto è stato inserire prima all'ultima riga.

Il modo più semplice per capire uno schema per il codice vero e proprio è quello di registrare una macro in Word per quell'azione specifica. Quindi è possibile modificare il codice generato per soddisfare sintassi diversa (s) di VB, VB.NET, C # ecc.

Il frammento di codice seguente mostra l'utilizzo di un'applicazione 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)

Spero che questo aiuti.

Per cambiare la posizione del cursore alla fine del documento corrente in un C # Word Add-In VSTO:

this.Application.ActiveDocument.Range(
this.Application.ActiveDocument.Content.End-1,
this.Application.ActiveDocument.Content.End-1).Select();

COME: Definire e selezionare intervalli nei documenti

Prova questo:

int lNumberOfPages = 
  _WordDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false);

WordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage,WordApp.WdGoToDirection.wdGoToLast, lNumberOfPages);

È possibile utilizzare il segnalibro predefinito:

EndOfDoc oDoc.Bookmarks.Item("\endofdoc").Range

Altri Preferiti predefiniti:

ActiveDocument.Bookmarks("\Para").Copy "currpara"

https://msdn.microsoft.com / it-it / VBA / Word-VBA / articoli / predefiniti-bookmarks

per l'ufficio netta:

mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top