问题
I want to add a section break at the end of the document and add some text.
My code is as below:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace WordDocManipulation
{
class Program
{
static void Main(string[] args)
{
string path = @"C:\sample.docx";
string strtxt = "Hello This is done by programmatically";
OpenAndAddTextToWordDocument(path,strtxt);
}
public static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
/* I want to the below text to be added in the new section */
// Open a WordprocessingDocument for editing using the filepath.
WordprocessingDocument wordprocessingDocument =
WordprocessingDocument.Open(filepath, true);
// Assign a reference to the existing document body.
Body body = wordprocessingDocument.MainDocumentPart.Document.Body;
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
// Close the handle explicitly.
wordprocessingDocument.Close();
}
}
}
What should I do?
回答1:
You need to add the section break to the section properties. You then need to append the section properties to the paragraph properties. Followed by appending the paragraph properties to a paragraph.
Paragraph paragraph232 = new Paragraph();
ParagraphProperties paragraphProperties220 = new ParagraphProperties();
SectionProperties sectionProperties1 = new SectionProperties();
SectionType sectionType1 = new SectionType(){ Val = SectionMarkValues.NextPage };
sectionProperties1.Append(sectionType1);
paragraphProperties220.Append(sectionProperties1);
paragraph232.Append(paragraphProperties220);
The resulting Open XML is:
<w:p>
<w:pPr>
<w:sectPr>
<w:type w:val="nextPage" />
</w:sectPr>
</w:pPr>
</w:p>
If you create a Word document that looks the way you want the result to look, then open in it in the Open XML Productivity Tool, you can reflect the code and see what C# code would generate the various Open XML elements you are trying to achieve.
回答2:
First you need to create a break paragraph
Paragraph PageBreakParagraph = new Paragraph(new DocumentFormat.OpenXml.Wordprocessing.Run(new DocumentFormat.OpenXml.Wordprocessing.Break() { Type = BreakValues.Page }));
Then you need to append the paragraph
wordprocessingDocument.MainDocumentPart.Document.Body.Append(PageBreakParagraph)
You can also specify where to insert it, if you don't want to append it to the end by using the InsertAfter and InsertBefore methods
wordprocessingDocument.MainDocumentPart.Document.Body.InsertAfter(PageBreakParagraph, ReferenceElement);
wordprocessingDocument.MainDocumentPart.Document.Body.InsertBefore(PageBreakParagraph, ReferenceElement);
Edit:
This adds a page break not a section break.
回答3:
this one will add section break at the end of the page
private static void AddSectionBreakToTheDocument(string fileName)
{
using (WordprocessingDocument mydoc = WordprocessingDocument.Open(fileName, true))
{
MainDocumentPart myMainPart = mydoc.MainDocumentPart;
Paragraph paragraphSectionBreak = new Paragraph();
ParagraphProperties paragraphSectionBreakProperties = new ParagraphProperties();
SectionProperties SectionBreakProperties = new SectionProperties();
SectionType SectionBreakType = new SectionType() { Val = SectionMarkValues.NextPage };
SectionBreakProperties.Append(SectionBreakType);
paragraphSectionBreakProperties.Append(SectionBreakProperties);
paragraphSectionBreak.Append(paragraphSectionBreakProperties);
myMainPart.Document.Body.InsertAfter(paragraphSectionBreak, myMainPart.Document.Body.LastChild);
myMainPart.Document.Save();
}
}
来源:https://stackoverflow.com/questions/20040613/how-to-add-section-break-next-page-using-openxml