0

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

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();

在此处输入图像描述

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

4

1 回答 1

1

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

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

Word.Range target = doc.Paragraphs[1].Range;
target.Collapse wdCollapseStart;
target.FormattedText = doc.Paragraphs[2].Range.FormattedText;
doc.Paragraphs[3].Range.Delete;
于 2021-08-25T13:25:14.050 回答