2014-11-03 2 views
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. Таким образом, я не мог назначить его после создания закладки. `

ответ

0

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

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

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 
Смежные вопросы