Положение курсора в начале / конце документа Word

мы манипулируем нашими документами Word 2007 из .Net с помощью Word Interop. В основном делать вещи с полями, как в:

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

это оставляет последнее поле в выбранном документе.

Итак, ради аккуратности мы хотели бы поместить курсор на конец документа (или даже старт было бы хорошо).

Googling для ответа не бросает много ... самое близкое, что я могу сделать, это предложить нам нужно заниматься диапазонами или закладками. Есть GoTo метод Document объект, но ни один из WdGoToItem опции, которые он предлагает, полезны.

разве нет простого способа просто отправить курсор в конец (или начало) документа?

редактировать

часть моей проблемы заключалась в том, что мне не нравилось оставлять последнее выбранное поле. Теперь поняли, что я могу сделать

f.Unlink

удалить mergefield и просто оставьте текст поля там как обычный текст. Что аккуратнее, независимо от того, перемещаем ли мы курсор

8 ответов


@Alexander Kojevnikov: Спасибо за помощь, потому что вы поставили меня на правильный путь. Однако я обнаружил, что должен применить.Перейти к объекту выбора слова, а не к документу. Как в:

    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)

вот как это выглядит в 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);

Я думаю, это будет еще проще в VB.Net поскольку он поддерживает дополнительные параметры.


Я не уверен, что использую ту же среду, что и вы, но перейти к старт или конец документа, вот что работает для меня:

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

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

Я использую unit Word_TLB в Delphi с объектом - словом Appliction.Применение

следующим образом:

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

обычно конец документа word является:

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

когда я использую

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

новый контент был вставлен перед последней строкой.


самый простой способ выяснить схему для фактического кода-записать макрос в Word для этого конкретного действия. Затем вы можете изменить сгенерированный код в соответствии с различными синтаксисами VB, VB.NET, C# etc.

приведенный ниже фрагмент кода демонстрирует использование 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)

надеюсь, что это помогает.


чтобы изменить положение курсора в конце текущего документа в надстройке C# Word VSTO:

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

посмотреть как практическое в документах


попробуйте это :

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

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

Вы можете использовать предопределенные закладки:

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

другие стандартные закладки:

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

https://msdn.microsoft.com/en-us/VBA/Word-VBA/articles/predefined-bookmarks