Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Interop(C#)向Word文档添加结构化内容?_C#_Ms Word_Ms Office_Vsto_Office Interop - Fatal编程技术网

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

如何通过Interop(C#)向Word文档添加结构化内容?,c#,ms-word,ms-office,vsto,office-interop,C#,Ms Word,Ms Office,Vsto,Office Interop,谢谢你的关注。我正在写一些C#来基于数据集创建word文档。使用Microsoft.Office.Interop.Word我可以创建一个带有格式化标题的文档,但是没有相关的结构。换句话说,我无法在导航窗格中查看我的分区或生成目录 以下是我正在尝试的: Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application(); Microsoft.Office.Intero

谢谢你的关注。我正在写一些C#来基于数据集创建word文档。使用
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样式,但没有关联的结构。

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

在你的情况下(C#):


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

您可以将大纲级别(位于段落范围的段落格式上)设置为所需级别(VBA):

在你的情况下(C#):


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

起初我的想法与评论中提到的@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();
var hText=document.parations.Add();

hText.Range.Text=solutionModel.Name;// 起初,我的想法与评论中提到的@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();
var hText=document.parations.Add();

hText.Range.Text=solutionModel.Name;//+1这可能确实是这里的问题。仅供记录:如果未修改内置标题样式,那么大纲级别应该已经正确(即标题1具有大纲级别1,标题2具有大纲级别2等)。这也是我最初认为的@DirkVollmar,并且非常惊讶地发现(如@Matthew)它没有正常工作。我对它做了更多的研究,发现在应用样式设置后设置文本丢失了。通过在应用样式之前移动文本设置,似乎可以解决问题(参见我的另一个回答)。+1这可能确实是这里的问题。仅供记录:如果未修改内置标题样式,那么大纲级别应该已经正确(即标题1具有大纲级别1,标题2具有大纲级别2等)。这也是我最初认为的@DirkVollmar,并且非常惊讶地发现(如@Matthew)它没有正常工作。我对它做了更多的研究,发现在应用样式设置后设置文本丢失了。通过在应用样式之前移动文本设置,似乎可以解决问题(请参阅我的另一个answler)。这也可能是一个刷新问题。保存新创建的文档,关闭Word,然后再次打开文档。导航窗格现在是否显示文档的结构?这也可能是刷新问题。保存新创建的文档,关闭Word,然后再次打开文档。导航窗格现在是否显示了文档的结构?的确,设置
样式后也应设置
空格after
。对,否则标题样式将恢复更改后的空格after。谢谢,是的--文本设置的顺序至关重要。之后我设置了大纲级别和样式,所有工作都完成了。再次感谢。事实上,设置
样式
后也应设置
空格。对,否则标题样式将恢复更改后的空格。谢谢,是的--文本设置的顺序至关重要。之后我设置了大纲级别和样式,所有工作都完成了。再次谢谢你。
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();