繁体   English   中英

如何以编程方式在Word文档标题中添加书签?

[英]How to add bookmark in word document header programmatically?

我已经在Word文档中创建了书签。 但是,在正文部分而不在页眉和页脚部分。 现在,我想在“主要标题”部分中创建书签。

实际上,我正在尝试在运行时更新书签的文本。 但是,每当我更改书签的文本时,它都会被删除。 因此,我必须以编程方式再次创建它。

这是我的代码,用于替换Word文档书签的文本。

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 
}

因此,此代码中的问题是在替换书签文本之前, bookmark对象的StoryType属性将为Microsoft.Office.Interop.Word.WdStoryType.wdPrimaryHeaderStory 但是,在创建新书签后,将StoryType属性作为Microsoft.Office.Interop.Word.WdStoryType.wdMainTextStory代替Microsoft.Office.Interop.Word.WdStoryType.wdPrimaryHeaderStory 因此,在创建书签时如何更改该属性或分配该属性。 属性StoryTypeReadOnly 因此,创建书签后无法分配它。 `

问题基本上是使用文档作为起点来创建新范围。 因为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM