Удалить содержимое закладки, не удаляя закладку в ms word, используя c #

1

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

Но затем я получаю закладку, которая по-прежнему содержит первый и последний характер содержимого, которое я хотел удалить.

Теги:
bookmarks
office-interop

3 ответа

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

Если вы хотите узнать больше об этой теме, посмотрите этот вопрос.

0

Вы можете попробовать следующее:

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

PS
Все еще пытается решить несколько закладок.

0

Я обнаружил, что если вы конвертируете текст в таблицу и вставляете одиночную закладку I-луча в ячейку, в которой вам это нужно, таблица защищает закладку, даже если вы удаляете содержимое. Затем, как только вы разработали всю свою vba для формы, если вы преобразуете форму в точку, пользователи не должны иметь проблемы с удалением закладок случайно, и вам необходимо устранить эту проблему, чтобы исправить свою ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню