使用c#删除书签的内容,而不删除ms word中的书签
本文关键字:删除 书签 ms word 使用 | 更新日期: 2023-09-27 18:20:17
在ms-word2010中,我有一个书签名为:nameOfBookmark
现在,书签内容可以是任何内容,从文本到图片、表格的混合,以及你想放在word文档中的任何内容。
问题如下:我有我的书签,里面有一些我想删除的内容。然而,每次我试图删除内容时,它也会删除我想要保留的书签。
我试过了,它只是删除了整个东西:
public void cleanBookmark(string bookmark)
{
var start = currentDocument.Bookmarks[nameOfBookmark].Start;
var end = currentDocument.Bookmarks[nameOfBookmark].End;
Word.Range range = currentDocument.Range(start, end);
range.Delete();
}
我还尝试将范围设置为:
Word.Range range = currentDocument.Range(start +1, end -1);
但后来我得到了一个书签,其中仍然包含我想要删除的内容的第一个和最后一个字符。
我想知道为什么我必须一直回答自己的问题,如果你认为这可能是我提问方式的问题,请通知我。
不管怎样,经过更多的研究,我找到了一个解决方案,我想要的事情似乎根本无法完成,或者至少不是我认为可以完成的方式。
如果您删除了书签的内容,它也会删除书签。因此,您要做的是将书签的名称和范围存储在本地变量中,然后在删除书签后再次添加书签。
public void cleanBookmark(string bookmark)
{
var start = currentDocument.Bookmarks[bookmark].Start;
var end = currentDocument.Bookmarks[bookmark].End;
Word.Range range = currentDocument.Range(start, end);
range.Delete();
//The Delete() only deletes text so if you got tables in the doc it leaves the tables empty.
//The following removes the tables in the current range.
if (range.Tables.Count != 0)
{
for (int i = 1; i <= range.Tables.Count; i++)
{
range.Tables[i].Delete();
}
}
currentDocument.Bookmarks.Add(bookmark, range);
}
如果你想阅读更多关于这个主题的内容,请看这个问题。
我发现,如果将文本转换为一个表,并在需要的单元格中插入一个I-beam书签,即使删除了内容,该表也会保护书签。然后,一旦你为表单计算出了所有的vba,如果你将表单转换为dotm,用户就不会有意外删除书签的问题,你必须对表单进行故障排除才能纠正他们的错误。
你可以试试这个:
ActiveDocument.Bookmarks("name").Range.Characters.First.Delete
p.S.
仍在尝试解决多个书签的问题。
当然,很多人也会遇到同样的问题——就像我一样。不同的是,我使用VBA(而不是C#)进行编程。经过一些搜索,我找到了最终的解决方案:请参阅The Anchorange(Gregory K.Maxey著)
因此,我设计了以下非常简单的程序:
Sub PasteIntoBookmark_Test()
Dim BookRange As Word.Range, NewText As String, BookName As String
NewText = ""
BookName = "Name"
If ActiveDocument.Bookmarks.Exists(BookName) Then
Set BookRange = ActiveDocument.Bookmarks(BookName).Range
Debug.Print BookRange.Text
BookRange.Text = NewText
ActiveDocument.Bookmarks.Add BookName, BookRange
Debug.Print BookRange.Text
If ActiveDocument.Bookmarks.Exists(BookName) Then
Debug.Print "Bookmark " & BookName & " still exists"
Else ' Just in case the above wouldn't work (but it does):
With ActiveDocument.Bookmarks
.Add Range:=BookRange, Name:=BookName
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
End If
Else
Stop
End If
End Sub
这样就可以很容易地清除书签而不必删除它!当然,以后可以在这个书签中写入新的文本。