Office Word桌面间标题样式未显示在目录中

本文关键字:显示 样式 Word 桌面 标题 Office | 更新日期: 2023-09-27 18:00:24

我正在使用Office的word interop构建一个word文档。我正在通过代码设置标题样式。内容的样式设置正确,但是,打开创建的word文档时,没有为页眉中的选择选择样式。这导致目录找不到标题。

object oMissing = Missing.Value;
//Start Word and create a new document.
var application = new Application();
application.Visible = true;
var document = application.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
foreach (var member in assembly.Members)
{
    //Insert a paragraph at the beginning of the document
    var paragraph = document.Content.Paragraphs.Add(ref oMissing);
    paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
    paragraph.Range.Text = member.MemberName;
    paragraph.Range.InsertParagraphAfter();
}
document.TablesOfContents.Add(document.Content, true /*use heading styles*/, oMissing, oMissing, oMissing,
                                                    oMissing, oMissing, oMissing, oMissing, oMissing,
                                                    oMissing, oMissing);
document.SaveAs(@"C:'test.docx", oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
document.Close();
application.Quit();

此示例导致目录显示"未找到条目"。

请注意,内容的标题样式是正确的。但是,当我手动打开文档并选择"标题1"时,目录会正确找到条目。

你知道为什么会发生这种事吗?我正在使用内置样式名称调用set_Style。为什么它应用了样式,但实际上没有被视为样式(在本例中,是标题)?

更新

添加以下代码似乎只会使第一个标题在Word中被识别为标题。

    foreach (var member in assembly.Members)
    {
        document.ActiveWindow.Selection.set_Style(WdBuiltinStyle.wdStyleHeading1);
        //Insert a paragraph at the beginning of the document
        var paragraph = document.Content.Paragraphs.Add(ref oMissing);
        paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
        paragraph.Range.Text = member.MemberName;
        paragraph.Range.InsertParagraphAfter();
    }

Office Word桌面间标题样式未显示在目录中

我注意到操作顺序的差异

跟随代码不会生成真正的头,它看起来只是头

/*1*/ paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
/*2*/ paragraph.Range.Text = "Head";
/*3*/ paragraph.Range.InsertParagraphAfter();

要解决这个问题,你应该使用这个代码

/*1*/ paragraph.Range.Text = "Head";
/*2*/ paragraph.set_Style(WdBuiltinStyle.wdStyleHeading1);
/*3*/ paragraph.Range.InsertParagraphAfter();

添加段落后,选择可能有效的段落。

paragraph.Range().Select()

我不得不做一些类似的事情,但段落没有得到风格。。。

我使用了然后的TypeText,然后工作。。。我用了一个单词。还有精选。我正在合并文档,但我想你的代码应该是这样的:

(在行后:var document=application.Documents.Add(ref oMissing,ref oMission,ref oMising,ref o Missing))。我在using上使用Word=Microsoft.Office.Interop.Word,这样所选内容之前的"Word"就与之对应。

Word.Selection selection = application.Selection;
foreach (var member in assembly.Members)
{
  selection.TypeText(member.MerberName);
  selection.set_Style(WdBuiltinStyle.wdStyleHeading1);
  selection.TypeParagraph();
}

这在这里起到了作用,TOC正在被填满。