C# 在Word-openXML中的文档开头插入文本

C# 在Word-openXML中的文档开头插入文本,c#,sharepoint,ms-word,openxml,openxml-sdk,C#,Sharepoint,Ms Word,Openxml,Openxml Sdk,我正在使用OpenXML操作Microsoft Word文件(.docx) 我将Word文件作为内存流发送,编辑它们,然后将它们发送回浏览器,以便它们在客户端office程序中打开 我想在已经包含内容的文档的开头插入文本,大约10行。我是这样做的 using (var wordprocessingDocument = WordprocessingDocument.Open(mem, true)) { Paragraph firstParagraph = wordprocessing

我正在使用OpenXML操作Microsoft Word文件(.docx)

我将Word文件作为内存流发送,编辑它们,然后将它们发送回浏览器,以便它们在客户端office程序中打开

我想在已经包含内容的文档的开头插入文本,大约10行。我是这样做的

using (var wordprocessingDocument = WordprocessingDocument.Open(mem, true))
{   
    Paragraph firstParagraph = wordprocessingDocument.MainDocumentPart.Document.Descendants<Paragraph>().First();   


    Run run1 = new Run();
    Text text1 = new Text();
    text1.Text = "Document type: ";

    run1.Append(text1);

    Run run2 = new Run();
    Break break1 = new Break();

    run2.Append(break1);
    ProofError proofError1 = new ProofError() { Type = ProofingErrorValues.SpellStart };

    Run run3 = new Run();
    Text text2 = new Text();
    text2.Text = "Document ID";

    run3.Append(text2);
    ProofError proofError2 = new ProofError() { Type = ProofingErrorValues.SpellEnd };

    Run run4 = new Run();
    Break break2 = new Break();
    Text text3 = new Text();
    text3.Text = "Document Title";

    run4.Append(break2);
    run4.Append(text3);

    firstParagraph.Append(run1);
    firstParagraph.Append(run2);
    firstParagraph.Append(proofError1);
    firstParagraph.Append(run3);
    firstParagraph.Append(proofError2);
    firstParagraph.Append(run4);

    Paragraph paragraph3 = new Paragraph() { RsidParagraphAddition = "0068718C", RsidParagraphProperties = "0068718C", RsidRunAdditionDefault = "00E1050C" };

    Run run5 = new Run();
    Text text4 = new Text();
    text4.Text = "A";

    run5.Append(text4);

    Run run6 = new Run() { RsidRunAddition = "00126F2D" };
    Text text5 = new Text();
    text5.Text = "tlet";

    run6.Append(text5);

    paragraph3.Append(run5);
    paragraph3.Append(run6);

    Paragraph paragraph4 = new Paragraph() { RsidParagraphMarkRevision = "0068718C", RsidParagraphAddition = "00E1050C", RsidParagraphProperties = "0068718C", RsidRunAdditionDefault = "00E1050C" };
    BookmarkStart bookmarkStart1 = new BookmarkStart() { Name = "_GoBack", Id = "0" };
    BookmarkEnd bookmarkEnd1 = new BookmarkEnd() { Id = "0" };

    paragraph4.Append(bookmarkStart1);
    paragraph4.Append(bookmarkEnd1);

    SectionProperties sectionProperties1 = new SectionProperties() { RsidRPr = "0068718C", RsidR = "00E1050C", RsidSect = "000C7A63" };

}
使用(var-wordprocessingDocument=wordprocessingDocument.Open(mem,true))
{   
段落firstparation=wordprocessingDocument.MainDocumentPart.Document.subjects().First();
运行run1=新运行();
Text text1=新文本();
text1.Text=“单据类型:”;
run1.Append(text1);
Run run2=新运行();
Break break1=新的Break();
run2.Append(break1);
Proof Error Proof Error1=新的Proof Error(){Type=Proof ErrorValues.SpellStart};
运行run3=新运行();
Text text2=新文本();
text2.Text=“文档ID”;
run3.Append(text2);
ProoftError ProoftError2=新的ProoftError(){Type=ProofingErrorValues.SpellEnd};
运行run4=新运行();
Break break2=新的Break();
Text text3=新文本();
text3.Text=“文件标题”;
run4.Append(break2);
run4.Append(text3);
第一段。追加(第1行);
第一段。追加(第2行);
第一段。附加(1);
第一段。追加(第3行);
第一段。附加(2);
第一段。追加(第4行);
段落段落3=新段落(){RsidParagraphAddition=“0068718C”,RsidParagraphProperties=“0068718C”,rsidParagraphAdditionDefault=“00E1050C”};
Run run5=新运行();
Text text4=新文本();
text4.Text=“A”;
run5.Append(text4);
Run run6=new Run(){rsidrunadition=“00126F2D”};
Text text5=新文本();
text5.Text=“tlet”;
run6.Append(text5);
第3段追加(第5行);
第3段追加(第6行);
段落段落4=新段落(){RsidParagraphMarkRevision=“0068718C”,RsidParagraphAddition=“00E1050C”,RsidParagraphProperties=“0068718C”,rsidParagraphAdditionDefault=“00E1050C”};
BookmarkStart bookmarkStart1=newbookmarkstart(){Name=“\u GoBack”,Id=“0”};
BookmarkEnd bookmarkEnd1=newbookmarkend(){Id=“0”};
第4段.附加(1);
第4段.附加(第1段);
SectionProperties sectionProperties1=新的SectionProperties(){RsidRPr=“0068718C”,RsidR=“00E1050C”,rsidspect=“000C7A63”};
}

我的问题是,如果我已经从第一行获得了一些文本,那么我的文本将附加在原始文本之后。如何将原始内容向下推几行,并在上面插入文本?

使用PrependChild而不是Append。Append将始终在当前元素的末尾插入。因此,如果你已经在第一段中有了内容,你的附加将把你的文本放在最后。您也可以通过调用Document.PrependChild(firstparation)将文本作为新的第一段插入。

谢谢您的提示,Maarten。您知道如何在文本中添加lineshift/enter吗?