使用c#删除书签的内容而不删除ms字中的书签

时间:2014-09-02 13:46:56

标签: c# office-interop bookmarks

在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);

然后我最终得到一个书签,其中仍然包含我想要删除的内容的第一个和最后一个字符。

3 个答案:

答案 0 :(得分:5)

我想知道为什么我必须继续回答我自己的问题,如果您认为这可能是我提出问题的方式,请通知我。

无论如何,经过一番研究后我找到了一个解决方案,似乎我想要的东西根本无法完成,或者至少不是我认为可以做到的。

如果删除书签的内容,它也会删除书签。因此,您需要做的是将书签的名称和范围存储在局部变量中,然后在删除书签后再次添加书签。

    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);
    }

如果您想了解有关此主题的更多信息,请参阅this问题。

答案 1 :(得分:0)

我发现如果您将文本转换为表并将单个I beam书签插入您需要它的单元格中,即使您删除了内容,该表也会保护书签。然后,一旦你完成了表单的所有vba,如果你将表单转换为dotm,用户不应该在意外删除书签时遇到任何问题而你必须对表单进行故障排除以修复他们的错误

答案 2 :(得分:0)

你可以试试这个:

ActiveDocument.Bookmarks("name").Range.Characters.First.Delete

P.S。
仍在尝试解决多个书签问题。