如何通过Interop(C#)向Word文档添加结构化内容?

时间:2016-10-19 20:44:35

标签: c# ms-word ms-office vsto office-interop

谢谢你的期待。我正在编写一些C#来创建基于数据集的单词doc。使用Microsoft.Office.Interop.Word我能够为这些部分创建一个带有格式标题的文档,但是没有相关的结构。换句话说,我无法在导航窗格中看到我的部分或生成目录。

以下是我的尝试:

Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document document = WordApp.Documents.Add(ref missing, ref missing, ref missing, ref missing);

document.Range(0, 0);

foreach (var solutionModel in solutions)
{
    var hText = document.Paragraphs.Add();
    hText.Format.SpaceAfter = 10f;
    hText.set_Style(Microsoft.Office.Interop.Word.WdBuiltinStyle.wdStyleHeading1);
    hText.Range.Text = solutionModel.Name;
    hText.Range.InsertParagraphAfter();

    var pText = document.Paragraphs.Add();
    pText.Format.SpaceAfter = 50f;
    pText.set_Style(Microsoft.Office.Interop.Word.WdBuiltinStyle.wdStyleNormal);
    pText.Range.Text = "Lorem ipsum dolor sit amet.";
    pText.Range.InsertParagraphAfter();
}

WordApp.Visible = true;

这在Word中很好地呈现标题(hText)采用原生标题1样式,但没有相关的结构。

2 个答案:

答案 0 :(得分:2)

您可以将OutlineLevel(位于段落范围的ParagrapFormat中)设置为所需的级别(VBA):

ActiveDocument.Paragraphs(1).Range.ParagraphFormat.OutlineLevel = wdOutlineLevel1

在您的情况下(C#):

hText.Range.Text = solutionModel.Name;
hText.Range.ParagraphFormat.OutlineLevel = Microsoft.Office.Interop.Word.WdOutlineLevel.wdOutlineLevel1;

这会将所选段落添加到导航视图

答案 1 :(得分:2)

最初我的想法与评论中提到的@Dirk一样,但是测试了它,因为你已经看到自己在你的代码中没有用。

在做了一些更多的研究后,我发现我的另一个答案实际上并没有导致将正确的标题样式应用于你添加的段落。所以我的测试结果如下:

您需要在之前设置文字

var hText = document.Paragraphs.Add();

hText.Range.Text = solutionModel.Name; // <--

hText.set_Style(Microsoft.Office.Interop.Word.WdBuiltinStyle.wdStyleHeading1);
hText.Format.SpaceAfter = 10f;
hText.Range.InsertParagraphAfter();

我添加了两行空行以引起对文本行位置的注意,但你可以将其保留。