Поместить курсор в начало / конец документа Word
Мы манипулируем нашими документами Word 2007 из.Net с помощью Word Interop. В основном делать вещи с полями, как в:
For Each f In d.Fields
f.Select()
//do stuff with fields here
Next
Это оставляет последнее поле в выбранном документе.
Итак, ради аккуратности мы хотели бы поместить курсор в конец документа (или даже начало будет в порядке).
Поиск ответа на вопрос не так уж и много... ближайшее, что я могу получить, кажется, предполагает, что нам нужно использовать диапазоны или закладки. Есть GoTo
метод для Document
объект, но ни один из WdGoToItem
варианты, которые он предлагает, полезны.
Разве нет простого способа просто отправить курсор в конец (или начало) документа?
редактировать
Часть моей проблемы была в том, что мне не нравилось оставлять последнее выбранное поле. Теперь поняли, что я могу сделать
f.Unlink
удалить mergefield
и просто оставьте текст поля как обычный текст. Что аккуратнее, независимо от того, будем ли мы перемещать курсор или нет
9 ответов
@ Александр Кожевников: Спасибо за вашу помощь, потому что вы поставили меня на правильный путь. Однако я обнаружил, что должен был применить.GoTo к объекту выделения слова, а не к документу. Как в:
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
Я использую модуль Word_TLB в Delphi с объектом Appliction - Word.Application
следующим образом:
aWordDoc.Application.Selection.EndKey(wdStory,wdMove);
как правило, конец слова документа:
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# и т. Д.
Приведенный ниже фрагмент кода демонстрирует использование приложения 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)
Надеюсь это поможет.
Чтобы изменить положение курсора в конце текущего документа в CST Word Add-In 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
Для сетевого офиса:
mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();