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

时间:2009-10-19 23:20:11

标签: .net interop ms-word mergefield

我们正在使用Word Interop从.Net处理我们的Word 2007文档。主要用以下字段做事:

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

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

因此,为了整洁,我们希望将光标放在文档的结束上(甚至开始也可以)。

谷歌搜索答案并没有引起太大的影响......我能得到的最接近似乎暗示我们需要让自己参与范围或书签。 GoTo对象有一个Document方法,但它提供的WdGoToItem选项都没有用。

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

修改

我的部分问题是我不喜欢选择最后一个字段。现在已经意识到我可以做到

f.Unlink

删除mergefield并将字段文本保留为纯文本。哪个更整洁,我们是否也重新定位光标

9 个答案:

答案 0 :(得分:13)

@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 :(得分:8)

这就是它在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中它会更容易,因为它支持可选参数。

答案 2 :(得分:3)

我不确定我是否使用与您相同的环境,但要转到文档的开始结束,这对我有用:< / p>

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

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

答案 3 :(得分:2)

我在Delphi中使用单元Word_TLB和Appliction对象 - 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');

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

答案 4 :(得分: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)

希望这有帮助。

答案 5 :(得分:0)

在C#Word加载项VSTO中更改当前文档末尾的光标位置:

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

请参阅How to: Programmatically Define and Select Ranges in Documents

答案 6 :(得分:0)

试试这个:

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

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

答案 7 :(得分:0)

您可以使用预定义的书签:

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

其他预定义的书签:

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

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

答案 8 :(得分:0)

对于网络办公室:

#include <iostream>
#include <array>

template<int sizeVertical, int sizeHorizontal>
class Arr
{
    private:
    std::array<std::array<int, sizeHorizontal>, sizeVertical> arr;

    public:
    Arr() { }
    void Init() {
        for (int i = 0; i < sizeVertical; i++) {
            for (int j = 0; j < sizeHorizontal; j++) {
                arr[i][j] = i + j;
            }
        }
    }
    void Print() {
        for (int i = 0; i < sizeVertical; i++) {
            for (int j = 0; j < sizeHorizontal; j++) {
                std::cout << arr[i][j] << " ";
            }

            std::cout << "\n";
        }   
    }
};

int main()
{
    Arr<10, 2> arr;
    arr.Init();

    arr.Print();
}