Word Interop Delete导致错误的参数

时间:2011-10-10 16:19:44

标签: c# ms-word interop

我很高兴能够编写一些在Office XP环境中移动的代码。我已经引用了OfficeXP Interop Assemblies并编写了代码来搜索/替换内容。这很好。现在我需要删除书签周围的文本,并且不断向我抛出异常。

以下是一些代码:

            object units = WdUnits.wdLine;
            object lines = 2;
            object extend = WdMovementType.wdExtend;

            object bookmarkName = "Bank1";
            var bm = doc.Bookmarks;
            var bm1 = doc.Bookmarks.get_Item(bookmarkName);
            var ra = bm1.Range;

            ra.Delete(ref units, ref lines);

最后一行是我得到“错误参数”异常的地方。看看MSDN中的定义我认为我是对的。但显然我不是。希望你们能在这里帮助我。

更新:好的,我明白了。使用Delete对象上的Range方法,我只能使用wdWord作为参数。我现在想改变我的问题:我想要做的是从书签开始删除两行。我该怎么做?

2 个答案:

答案 0 :(得分:0)

Word中的Range对象不是“面向行”,它们不允许行操作,只允许段落操作。但是,选择允许行操作。当前选择不是单词文档的属性,而是单词application object的属性。这里有一些VBA代码基本上可以尝试,我认为您可以轻松地将其移植到C#:

Dim rng As Range
Dim doc As Document
Set doc = ActiveDocument
Set rng = doc.Bookmarks("BM").Range

Dim s As Long, e As Long
rng.Select
s = Application.Selection.Start
e = Application.Selection.Next(wdLine, 1).End

Application.Selection.SetRange s, e
Application.Selection.Delete  

答案 1 :(得分:0)

好的,我找到了一种方法来做我必须做的事情。这是代码:

            if (doc.Bookmarks.Exists("Bank1"))
            {
                object bookmarkName = "Bank1";
                object units = WdUnits.wdLine;
                object lines = 2;
                object extend = WdMovementType.wdExtend;
                doc.Bookmarks.get_Item(bookmarkName).Select();

                app.Selection.MoveDown(units, lines, extend);
                app.Selection.Delete();
            }