Положение курсора на начало/конец документа Word
-
22-09-2019 - |
Вопрос
Мы манипулируем нашим словом 2007 года от .net с использованием Word Interop. В основном делая вещи с полями, как в:
For Each f In d.Fields
f.Select()
//do stuff with fields here
Next
Это оставляет последнее поле в выбранном документе.
Итак, ради аккуратности мы хотели бы позиционировать курсор на конец документа (или даже Начало было бы в порядке).
Гуглинг для ответа не так ужесточает ... ближайшее, что я могу получить, кажется, предполагает, что нам нужно привлечь себя к диапазонам или закладкам. Есть GoTo
Метод для Document
объект, но ни один из WdGoToItem
Варианты, которые он предлагает, полезны.
Разве нет простого способа просто отправить курсор до конца (или запуска) документа?
Редактировать
Часть моей проблемы заключалась в том, что мне не нравилось оставлять последнее выбранное поле. Теперь понял, что я могу сделать
f.Unlink
Чтобы удалить mergefield
И просто оставьте текст поля там как простой текст. Что аккуратно, независимо от того, изменяем ли мы курсор
Решение
@Alexander Kojevnikov: Спасибо за вашу помощь, потому что вы поставили меня на правильный путь. Однако я обнаружил, что должен был применить .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
Я использую UNIT WORD_TLB в Delphi с Appliction Object- 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)
Надеюсь это поможет.
Чтобы изменить позицию курсора в конце текущего документа в Add-in VSTO C#:
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();