Inserting newlines in Word using OpenXML
Solution 1
To insert newlines, you have to add a Break
instance to the Run
.
Example:
run.AppendChild(new Text("Hello"));
run.AppendChild(new Break());
run.AppendChild(new Text("world"));
The XML produced will be something like:
<w:r>
<w:t>Hello</w:t>
<w:br/>
<w:t>world</w:t>
</w:r>
Solution 2
Here's a C# function that will take a string, split it on line breaks and render it in OpenXML. To use, instantiate a Run and pass it into the function with a string.
void parseTextForOpenXML( Run run, string textualData )
{
string[ ] newLineArray = { Environment.NewLine };
string[ ] textArray = textualData.Split( newLineArray, StringSplitOptions.None );
bool first = true;
foreach ( string line in textArray )
{
if ( ! first )
{
run.Append( new Break( ) );
}
first = false;
Text txt = new Text( );
txt.Text = line;
run.Append( txt );
}
Solution 3
Altough this question is already answered I have another approach to solve questions like :
How can I make XXX with OpenXML??
In this cases you could make use of the powerful Microsoft OpenXML productivity tool (also known as OpenXmlSdkTool). Download here.
- Create a new office document
- Add the parts to the document which you would like to reproduce with OpenXML SDK.
- Open the office document with Microsoft OpenXML productivity tool
- Click on "Reflect Code"
- On the right side you will see now you document reflected into C# code.
Solution 4
I have the same issue and in my case <w:br />
tag worked.
Danny
Updated on July 08, 2022Comments
-
Danny almost 2 years
I am using openxml WordProcessingDocument to open a Word template and replace placeholder x1 with a string. This works fine unless I need the string to contain a newline. How can I replace x1 with text may contain newlines that word would recognise? I have tried \n \r but these do not work
Just to explain further when the word template is opened I read it into a StreamReader then use .Replace to replace x1.
-
Danny almost 14 yearsI don't think I can use your answer in my situation. I updated my question to explain further
-
codeape almost 14 yearsSo you're working with the XML directly? In that case, try inserting XML like the example.
-
habiat over 9 yearsniceeeee solution,thank's a lot, i use this solution when my string contains \n\r
-
outofmind over 8 yearsNote, that in PPTX / PresentationML the
Break()
has to be child of theParagraph
, not child of theRun
-
BertuPG over 8 yearsWorked like a charm! Tank you very much!
-
dougajmcdonald over 8 yearsThis is a great answer! I was after working out some tricky open xml bits and had to google the inner workings of almost every element. Having a tool which can output the trick bits and paste them in is a major timesaver, thanks.
-
its4zahoor about 5 yearsThanks, I modified
string[ ] newlineArray = { Environment.NewLine, "\n", "\r\n", "\n\r" }
to make it work for all type of break. 8 years past but still it's the best answer.