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();
}
我注意到操作顺序的差异
跟随代码不会生成真正的头,它看起来只是头
/*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正在被填满。