Office Word intertop标题样式未在目录中显示

时间:2013-02-20 10:40:13

标签: c# ms-word office-interop

我正在使用Office的Word互操作构建一个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”时,目录会正确找到该条目。

为什么会发生这种情况的任何想法?我是callign 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();
    }

3 个答案:

答案 0 :(得分:1)

我注意到操作顺序的差异

关注代码不会生成真正的标题,它只是看起来像标题

/*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();

答案 1 :(得分:0)

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

paragraph.Range().Select()

答案 2 :(得分:0)

我必须做类似的事情,但段落没有得到风格......

我之后使用TypeText,然后工作......我也使用了Word.Selection。我正在合并文档,但我想你的代码应该是这样的:

(在行之后:var document = application.Documents.Add(ref oMissing,ref oMissing,ref oMissing,ref oMissing))。我在使用上使用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正在填补。