Posizionare il cursore a inizio / fine documento di Word
-
22-09-2019 - |
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
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();
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();