如何用 Interop.Word 反转段落

How to reverse paragraphs with Interop.Word

我正在尝试使用以下代码反转文档段落:

using Word = Microsoft.Office.Interop.Word;

object filePath = @"input.docx";
Word.Application app = new();
app.Visible = false;
object missing = System.Type.Missing;
object readOnly = false;
object isVisible = false;
Word.Document doc = app.Documents.Open(
    ref filePath,
    ref missing, ref readOnly, ref missing, ref missing,
    ref missing, ref missing, ref missing, ref missing,
    ref missing, ref missing, ref isVisible, ref missing,
    ref missing, ref missing, ref missing);
try
{
    Word.Range cachedPara2 = doc.Paragraphs[2].Range.Duplicate;
    doc.Paragraphs[2].Range.FormattedText = doc.Paragraphs[1].Range.FormattedText;
    doc.Paragraphs[1].Range.FormattedText = cachedPara2.FormattedText;
    doc.SaveAs(@"output.docx");
}
finally
{
    doc.Close();
    app.Quit();
}

期待这个:

实际结果是这样的:

如何获得期望?


更新

有了下面的答案,我的第一个案例就得到了预期的结果。

现在,在另一种情况下,我想执行以下操作:

不幸的是,我不太明白 .Collabse() 方法是如何工作的。我正在尝试使用 .InsertParagraphAfter():

doc.Paragraphs[2].Range.InsertParagraphAfter();
doc.Paragraphs[3].Range.FormattedText = doc.Paragraphs[5].Range.FormattedText;
doc.Paragraphs[5].Range.FormattedText = doc.Paragraphs[2].Range.FormattedText;
doc.Paragraphs[2].Range.Delete();

这个空段落是从哪里来的?如何避免?

范围对象本身没有任何内容,它只是指向内容的位置,就像一组地图坐标。

您需要做的是在第一段之前添加第二段的内容,这将创建一个新的第一段。然后您可以删除现在的第三段。例如:

Word.Range target = doc.Paragraphs[1].Range;
target.Collapse wdCollapseStart;
target.FormattedText = doc.Paragraphs[2].Range.FormattedText;
doc.Paragraphs[3].Range.Delete;