问题
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.
回答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>
回答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 );
}
回答3:
I have the same issue and in my case <w:br />
tag worked.
回答4:
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.
来源:https://stackoverflow.com/questions/2871887/inserting-newlines-in-word-using-openxml