C# 使用c将预定义样式附加到Word书签#

C# 使用c将预定义样式附加到Word书签#,c#,.net,ms-word,office-interop,C#,.net,Ms Word,Office Interop,我尝试将文本和预定义样式设置为书签。文本可以,但未设置样式。这个来源有什么问题 Word.Application word = new Word.Application(); word.Visible = true; Word.Document doc = word.Documents.Open("bookmark.dotx"); doc.Activate(); Word.Paragraph paragraph = doc.Bookmarks["navigatorHeadlineBookma

我尝试将文本和预定义样式设置为书签。文本可以,但未设置样式。这个来源有什么问题

Word.Application word = new Word.Application();

word.Visible = true;
Word.Document doc = word.Documents.Open("bookmark.dotx");
doc.Activate();

Word.Paragraph paragraph = doc.Bookmarks["navigatorHeadlineBookmark"].Range.Paragraphs.Add();
paragraph.Range.Text = "hello headline";
paragraph.Range.set_Style("navigatorHeadline");
//Debug 
paragraph.Range.Select(); //selects the expected text (hello headline)
Word.Selection selection = word.Selection;
selection.set_Style("navigatorHeadline"); //style is not set :-(

总结最终得出答案的故障排除步骤: 1.首先,确保书签位于文档中并包含正确的文本/范围。 2.检查样式名称拼写是否正确,请记住Word处理样式名称时区分大小写 3.直接格式和字符样式将覆盖段落样式的格式

这是最后一个被证明是样式格式没有出现的原因:文本是用超链接样式格式化的。这是一种字符样式,因此重写了代码中指定样式的格式

在这种情况下,必须删除字符样式才能查看段落样式的格式。以编程方式,这可以通过以下两种方式完成:

  • 通过将字符样式“默认段落字体”应用于范围 或
  • 通过使用选择对象的“清除格式”方法之一。选择哪一个取决于所需的确切行为。可以清除所有格式、所有直接格式或字符样式(这将产生与选项1相同的结果):
    Selection.ClearCharacterStyle

    为了排除故障,输入一行代码:paragration.Range.Select();然后让代码结束(如果后面有任何内容,请将其注释掉)。选择在哪里?它是否包含您期望的文本?如果您将UI中的样式应用于此选择,它是否符合您的预期,还是也会失败?您可能需要调整您的范围…我已经编辑了上面的源代码。paragration.Range.Select()选择正确的文本,但选择的set_样式不起作用。在这种情况下,我要检查样式名称是否拼写正确,记住它区分大小写。我还测试了将其直接应用于文档中的选择,作为最终用户,只是为了看看是否有什么奇怪的地方。另外要记住的是,如果这是一个段落而不是字符样式,根据Word中的设置,它可能不想应用于“仅字符”。这是模糊的,默认设置应该允许它,但你永远不知道。。。不幸的是,我在下周之前不会在一台有完整版本+dev环境的机器上,所以在那之前我不能为你做任何测试或查找设置。嗨,经过长时间的调试,我找到了一条出路。bookmark.dotx中的书签已格式化为超链接。如果格式为标准文本集,则样式(…)有效。谢谢你的帮助!