我很高兴能够编写一些在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
作为参数。我现在想改变我的问题:我想要做的是从书签开始删除两行。我该怎么做?
答案 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();
}