Как программно добавить закладку в заголовок документа Word?

1

Я создал закладку в текстовом документе. но, в основной части текста не в части верхнего и нижнего колонтитула. Теперь я хочу создать закладку в разделе "Основной заголовок".

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

Это мой код, чтобы заменить текст закладки документа документа.

if (doc.Bookmarks.Exists(_bookMarkName))
{
    object oBookMark = _bookMarkName;
    //Getting Bookmark Object
    Microsoft.Office.Interop.Word.Bookmark bookmark = doc.Bookmarks.get_Item(ref oBookMark);

    //calculating range to create bookmark.
    object start = bookmark.Range.Start;
    object end = bookmark.Range.Start + _value.Length;

    //After replacing this text, bookmark will be removed from the document. So, we have to creat it again.
    bookmark.Range.Text = _value;

    //Creating range from new values.
    object range = doc.Range(ref start, ref end);
    doc.Bookmarks.Add(_bookMarkName, ref range); //Adding new bookmark with new range 
}

Итак, в чем проблема в этом коде, свойство StoryType объекта bookmark будет Microsoft.Office.Interop.Word.WdStoryType.wdPrimaryHeaderStory перед заменой текста закладки. но после создания новой закладки свойство StoryType будет принято как Microsoft.Office.Interop.Word.WdStoryType.wdMainTextStory вместо Microsoft.Office.Interop.Word.WdStoryType.wdPrimaryHeaderStory. Итак, как мне изменить это свойство или назначить это свойство при создании закладки. Свойство StoryType - ReadOnly. Таким образом, я не мог назначить его после создания закладки. '

Теги:
ms-word

1 ответ

0

Проблема заключается в создании нового диапазона с использованием документа в качестве отправной точки. SInce Объект Range не имеет метода Range, я думаю, вам нужно будет получить соответствующий StoryRange из диапазона закладок, а затем использовать GetRange для получения диапазона в соответствующей истории. Я не проверял...

... потому что это не обязательно, если вы хотите, чтобы закладка замены "накрывала" текст, который вы только что вставили, поскольку вы должны иметь возможность сделать что-то более похожее на это, предполагая, что вы можете повторно передать этот синтаксис VBA обратно в С#

    Dim bm As Word.Bookmark
Dim bookMarkName As String
Dim doc As Word.Document
Dim newValue As String
Dim rng As Word.Range
'.
'.

If doc.Bookmarks.Exists(bookMarkName) Then
  ' Could do the following two statements in one
  Set bm = doc.Bookmarks(bookMarkName)
  Set rng = bm.Range
  rng.Text = newValue
  doc.Bookmarks.Add bookMarkName, rng
  Set rng = Nothing
  Set bm = Nothing
End If

Ещё вопросы

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