c#中如何正确替换word书签的内容?我得到book的range然后替换此range的text,默认情况下,此书签自动消失,自动添加一个同名的书签,第二次替换好使,第3次却不好使。
我想替换第三次却不知怎么办?看msdn也不知如何用c#实现。我的代码:

rangeText = row[ column.ColumnName ].ToString();
object oRange = range;
string newname=book.Name ;
range.Text =rangeText;
document.Books.Add( newname, ref oRange );
。msdn文档:不懂在很多方面,Book 对象类似于 Selection 对象或 Range 对象,都表示文档中的邻接区域。它有起始点和结束点,而且可以小至插入点、大至整个文档。但是,Book 对象和 Selection 或 Range 对象是不同的,因为您可以赋予 Book 对象一个名称,且当代码停止运行或当文档关闭时该名称依然存在。另外,虽然书签通常处于隐藏状态,但是可通过将 View 对象的 ShowBooks 属性设置成 True,使其可见。可以使用书签在文档中标记位置或作为文档中文本的容器。下面的示例说明了这些用途: 可以使用书签标记文本中标记的区域,以包含用户提供的数据或从数据源外部获得的数据例如,商务信函模板可能具有标记名称和地址信息的位置的书签。VBA 代码可以从用户或数据库中获得数据,并将其插入到由书签标记的正确位置。当标记了位置后,定位到该位置就象定位到书签一样简单。使用 Books 集合的 Exists 方法,可以确定文档是否包含特定的书签。使用 Book 对象的 Select 方法,可显示由书签标记的位置。当选定了书签后,Selection 对象和 Book 对象就表示了文档中的同一位置。 
如果文档中包含必须在某种条件下修改的样板文本,则可用 VBA 代码在这些指定位置根据特定条件插入不同的文本。可使用 Book 对象的 Range 属性创建 Range 对象,然后使用 Range 对象的 InsertBefore 方法、InsertAfter 方法或 Text 属性,添加或修改书签内的文本。 
当了解了通过 VBA 代码添加或更改文本的微妙之处后,使用书签将是一种非常有力的方法,增强在 Word 中创建的自定义应用程序。可以通过使用 Books 集合的 Add 方法添加书签。通过在 Add 方法的 Range 参数中的 Range 或 Selection 对象,可指定定位书签的位置。当使用 InsertBefore 方法、InsertAfter 方法或 Text 属性时,Range 对象将自动扩展以合并新的文本。当查看接下来的几个示例时,书签不会轻易调整自身,不过使书签象范围一样动态移动是简单的实践。当使用 Range 对象的 InsertBefore 方法向书签中添加文本时,文本将被添加到书签的起始点处,并且书签将扩展以包括新的文本。例如,如果在以下文本上具有名为 CustomerAddress 的书签(当 ShowBooks 属性设置成 True 时括号出现),[Seattle, WA 12345]则可以使用以下 VBA 代码将街道地址添加到该书签:Dim rngRange As Word.RangeSet rngRange = ActiveDocument.Books("CustomerAddress").Range
rngRange.InsertBefore "1234 Elm Drive #233" & vbCrLf
正如预期的一样,书签将会扩展以包括附加的地址信息:[1234 Elm Drive #233
Seattle, WA 12345]假定您希望使用 InsertAfter 方法将文本添加到包含街道地址的书签结尾处,而且希望使用以下代码添加城市、省份和邮政编码信息:Dim rngRange As Word.RangeSet rngRange = ActiveDocument.Books("CustomerAddress").Range
rngRange.InsertAfter vbCrLf & "Seattle, WA 12345"
注意当使用 InsertAfter 方法将文本添加到书签的结尾处时,书签不会自动扩展以包括新的文本:[1234 Elm Drive #233]
Seattle, WA 12345如果您不知道这一点,这种做法就可能引起问题。不过现在您已经知道了,解决起来就很容易。解决方案的第一部分出自于一起使用 Selection 和 Range 对象获得的益处。第二部分出自必须了解的书签的另一方面:如果您向已包含签的文档中添加书签,当创建新的书签时,原来的书签将被删除(但不是它所包含的文本)。下面的示例代码使用 InsertAfter 方法将文本添加到 CustomerAddress 书签的结尾处。然后使用 Range 对象的 Select 方法,创建一个 Selection 对象,其中包含所有要插入书签的文本。最后,它使用 Books 集合的 Add 方法,添加一个与原来的书签名称相同的新书签,然后使用 Selection 对象的 Range 属性指定该书签的位置:Dim rngRange As Word.RangeSet rngRange = ActiveDocument.Books("CustomerAddress").Range
With rngRange
   .InsertAfter vbCrLf & "Seattle, WA 12345"
   .Select
End With
ActiveDocument.Books.Add "CustomerAddress", Selection.Range
如果使用 Range 对象的 Text 属性替换书签的整个内容,则会导致类似的问题:书签中的文本在该过程中被替换后,书签本身即被删除。此问题的解决方案与前面示例中的 InsertAfter 方法中所采用的解决方案相同。插入新的文本,使用 Range 对象的 Select 方法选择文本,然后创建一个新书签,名称与原来的书签名称相同。