Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将光标定位在Word文档的开头/结尾_.net_Interop_Ms Word_Mergefield - Fatal编程技术网

.net 将光标定位在Word文档的开头/结尾

.net 将光标定位在Word文档的开头/结尾,.net,interop,ms-word,mergefield,.net,Interop,Ms Word,Mergefield,我们正在使用Word Interop从.Net操作Word 2007文档。主要使用字段进行操作,如: For Each f In d.Fields f.Select() //do stuff with fields here Next 这将使文档中的最后一个字段处于选中状态 因此,为了整洁起见,我们希望将光标定位在文档的末尾(甚至开始也可以) 在谷歌上搜索答案并不会让人感觉到什么。。。我能得到的最接近的结果似乎是建议我们需要参与范围或书签。对于Docum

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

For Each f In d.Fields
    f.Select()
    //do stuff with fields here            
Next
这将使文档中的最后一个字段处于选中状态

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

在谷歌上搜索答案并不会让人感觉到什么。。。我能得到的最接近的结果似乎是建议我们需要参与范围或书签。对于
Document
对象,有一个
GoTo
方法,但是它提供的
WdGoToItem
选项都没有用处

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

编辑

我的问题的一部分是我不喜欢留下最后一个字段。我现在意识到我能做到

f.Unlink
要删除
合并字段
,只需将字段文本保留为纯文本即可。这更整洁,不管我们是否重新定位光标

这是C#中的外观:


我想在VB.Net中会更容易,因为它支持可选参数。

@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)

我不确定我使用的环境是否与您相同,但要转到文档的开始结束,以下是适合我的内容:

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

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

我在Delphi中使用了带有Application对象-Word.Application的unit Word_TLB

详情如下:

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

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

要更改C#Word加载项VSTO中当前文档末尾的光标位置,请执行以下操作:

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

请参见

找出实际代码大纲的最简单方法是在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)
希望这有帮助。

试试这个:

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"
对于网络办公室:

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

在我的VisualStudio 2013实现中,这会将光标放在最后一行的开头,而不是文档的结尾。@Fuhrmanator VS 2013或Office 2013?我看到一些不同的行为从Office 2010(v14)迁移到Office 2013(v15)。他们都使用VS 2010 IDE,however@MichaelPaulukonis绝对是2013年。请参阅my,以了解适合我的解决方案。VS2013是一个IDE。这到底有什么影响?您使用的是什么.NET运行时?甚么版本的VSTO?什么版本的Office?
mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();