Using OpenXML SDK to replace text on a docx file with a line break (newline)
Solution 1
Try with a break. Check the example on this link. You just have to append a Break
Paragraphs, smart tags, hyperlinks are all inside Run. So maybe you could try this approach. To change the text inside a table, you will have to use this approach. Again the text is always inside a Run.
If you are saying that the replace is only replacing for an empty string, i would try this:
using (WordprocessingDocument doc =
WordprocessingDocument.Open(@"yourpath\testdocument.docx", true))
{
var body = doc.MainDocumentPart.Document.Body;
var paras = body.Elements<Paragraph>();
foreach (var para in paras)
{
foreach (var run in para.Elements<Run>())
{
foreach (var text in run.Elements<Text>())
{
if (text.Text.Contains("text-to-replace"))
{
text.Text = text.Text.Replace("text-to-replace", "");
run.AppendChild(new Break());
}
}
}
}
}
Solution 2
Instead of adding a line break, try making two paragraphs, one before the "text to be replaced" and one after. Doing that will automatically add a line break between two paragraphs.
Related videos on Youtube

slayernoah
SO has helped me SO much. I want to give back when I can. And I am #SOreadytohelp http://stackoverflow.com/users/1710577/slayernoah #SOreadytohelp
Updated on November 01, 2022Comments
-
slayernoah less than a minute
I am trying to use C# to replace a specific string of text on an entire DOCX file with a line break (newline).
The string of text that I am searching for could be in a paragraph or in a table in the file.
I am currently using the code below to replace text.
using (WordprocessingDocument doc = WordprocessingDocument.Open("yourdoc.docx", true)) { var body = doc.MainDocumentPart.Document.Body; foreach (var text in body.Descendants<Text>()) { if (text.Text.Contains("##Text1##")) { text.Text = text.Text.Replace("##Text1##", Environment.NewLine); } } }
ISSUE: When I run this code, the output DOCX file has the text replaced with a space (i.e. " ") instead of a line break.
How can I change this code to make this work?
-
slayernoah about 8 yearsThanks for looking into this. Using
run.AppendChild(new Break());
will probably create a new line. But how can I have that put into the document only where it is supposed to replace the text? -
slayernoah about 8 yearsThe
Text.Replace()
function only accepts two strings I believe -
Erik over 7 yearsThis only replaces single-run text. Text may be split up in multiple runs.
-
Tim Malone over 6 yearsHi Arun, welcome to SO. Can you please edit this answer to explain why this code fixes the problem, and how it works? Code only answers are discouraged here.