如何使用Microsoft.Office.Interop.Word库在输出中删除段落间距

时间:2019-02-02 17:20:06

标签: c# desktop-application

在我的C#桌面应用程序中,我正在使用Microsoft.Office.Interop.Word库来写入word文件。但是,只要导出完成,各段之间就会有巨大的空间。使用paragraph1.Range.ParagraphFormat.SpaceAfter = 0;参数也不会影响结果。 我想要的结果是Word中预设的“无间距”,但是经过一番研究,我发现该库不是一个选项。 有什么方法可以删除或设置段落之间的间距。 这是我的代码:

 Microsoft.Office.Interop.Word.Application word = new Application();
 word.Visible = false;
 var doc = word.Documents.Add();
 var paragraph1 = doc.Content.Paragraphs.Add();

 paragraph1.Range.Font.Name = "Calibri";
 paragraph1.Range.Font.Size = 11;

 paragraph1.Range.ParagraphFormat.SpaceBefore = 0;
 paragraph1.Range.ParagraphFormat.SpaceAfter = 0;

 paragraph1.Range.Text = story;
 paragraph1.Range.InsertParagraphAfter();

 doc.SaveAs2(@"F:\Documents\Visual Studio Projects\LITPC\LITPC\bin\Debug\"+title+".docx");

 word.Quit();

2 个答案:

答案 0 :(得分:1)

我通过更改上一段中的 Word.Paragraph.SpaceAfter 参数解决了这个问题。例如。

// First Paragraph
Word.Paragraph mainTitle = document.Paragraphs.Add();
mainTitle.Range.Text = "para1";
mainTitle.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
mainTitle.Range.InsertParagraphAfter();
mainTitle.SpaceAfter = 0.0f;

// Second Paragraph
Word.Paragraph semiTitle = document.Paragraphs.Add();
semiTitle.Range.Text = "para2";
semiTitle.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
semiTitle.Range.InsertParagraphAfter();
semiTitle.SpaceAfter = 10.0f;

因此,SpaceAftersemiTitle 将为 0。类似地,SpaceAfter 之后的下一段的 semiTitle 将为 10。

答案 1 :(得分:0)

首先,SpaceBeforeSpaceAfter属性采用浮点数,因此您需要在值后加上f。 试试:paragraph1.SpaceBefore = 0.0f;,对我有用。

此外,在插入新段落时,请小心重置间距,因为后续段落将继承新的间距。

或者,如果可以的话,请完全避免使用Interop Word,这是我已经呆了几天的深,黑,兔子洞。