c# - 如何以编程方式在word文档页眉中添加书签?

标签 c# ms-word

我在word文档中做过书签制作。但是,在正文部分不在页眉和页 footer 分。现在,我想在主标题部分创建书签。

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

这是我用来替换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

关于c# - 如何以编程方式在word文档页眉中添加书签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26707779/

相关文章:

c# - 如何在C#中正确使用Performance Counter或Process类来获取当前进程的内存使用情况?

c# - 在具有多个航路点的 IOS 中启动谷歌地图

c# - 使用 DocumentFormat.OpenXml 从 word 中获取文本

excel - Excel 工作表中的数据表

VB.NET Microsoft Office 互操作书签

c# - 使用 Dapper 的 JOIN 子句查询始终返回空结果集

c# - GUID 的 COM SAFEARRAY 从 C++ 返回到 C#

c# - HTML 帮助标签文本框使其只读

c# - Word vsto 获取带有隐藏字符的文档文本

c# - 如何在word 2003文档的开头插入空白页