在Word文档中将光标定位于开头/结尾

10

我们正在使用Word Interop从.NET操作我们的Word 2007文档。主要是对字段进行操作,例如:

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

这将选中文档中的最后一个字段。

为了整洁起见,我们希望将光标定位在文档的结尾(甚至开头也可以)。

搜索答案并没有找到太多...我能找到的最接近的答案似乎是建议我们需要涉及范围或书签。虽然Document对象有一个GoTo方法,但它提供的WdGoToItem选项都不实用。

没有一种简单的方法可以将光标发送到文档的末尾(或开头)吗?

编辑

我的问题的一部分是我不喜欢留下最后选定的字段。现在已经意识到我可以这样做:

f.Unlink

如何去除mergefield并将其留下作为纯文本。无论是否重新定位光标,哪种方法更加整洁。

9个回答

15

@Alexander Kojevnikov:谢谢你的帮助,因为你让我找到了正确的方向。然而我发现我必须将".GoTo"应用于Word Selection对象,而不是Document。如下所示:

    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)

1
在我的VisualStudio 2013实现中,这会将光标放置在最后一行的开头,而不是文档的结尾。 - Fuhrmanator
@Fuhrmanator VS 2013 还是 Office 2013?我发现从 Office 2010(v14)到 Office 2013(v15)有一些不同的行为。它们都使用 VS 2010 IDE,然而。 - Michael Paulukonis
@MichaelPaulukonis 绝对是VS2013。请查看我的答案,这是对我有效的解决方案。 - Fuhrmanator
VS2013是一个集成开发环境。这到底有什么影响?你使用的是哪个.NET运行时?VSTO的版本是多少?Office的版本是多少? - Michael Paulukonis

9

以下是使用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中会更容易,因为它支持可选参数。


3

我不确定我使用的环境和你一样,但是要在文档中跳转到开头结尾,以下是我的方法:

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

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

2

我在Delphi中使用单元Word_TLB,使用Application对象 Word.Application,具体如下:

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');

在最后一行之前插入了新内容。


1
最简单的方法是在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)

希望这有所帮助。

0

0

试试这个:

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

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

0

0

针对网络办公:

mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接