我正在尝试使用C#替换整个 DOCX文件中的特定字符串,并使用换行符(换行符)。
我要搜索的文字字符串可能位于文件的段落或表格中。
我目前正在使用以下代码替换文字。
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:当我运行此代码时,输出DOCX文件的文本被替换为空格(即“”)而不是换行符。
如何更改此代码才能使其正常工作?
答案 0 :(得分:2)
尝试使用break。查看此链接上的示例。你只需要附加一个Break
段落,智能标记,超链接都在Run内。所以也许你可以尝试这个approach。 要更改表格内的文字,您必须使用此approach。同样,文本总是在Run中。
如果你说替换只是替换空字符串,我会试试这个:
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());
}
}
}
}
}
答案 1 :(得分:1)
不要添加换行符,而是尝试制作两个段落,一个在“要替换的文本”之前,一个在之后。这样做会自动在两段之间添加换行符。
答案 2 :(得分:0)
text.Parent.Append(new DocumentFormat.OpenXml.Wordprocessing.Break());
答案 3 :(得分:0)
// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{
// Assign a reference to the existing document body.
Body body = wordprocessingDocument.MainDocumentPart.Document.Body;
//itenerate throught text
foreach (var text in body.Descendants<Text>())
{
text.Parent.Append(new Text("Text:"));
text.Parent.Append(new Break());
text.Parent.Append(new Text("Text"));
}
}
这将返回:
文本:
文本: