我正在使用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();
}
答案 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正在填补。