c# - novacode - Usar OpenXML SDK para reemplazar texto en un archivo docx con un salto de línea(nueva línea)
using novacode c# (4)
Estoy tratando de usar C # para reemplazar una cadena específica de texto en un archivo DOCX completo con un salto de línea (nueva línea).
La cadena de texto que estoy buscando podría estar en un párrafo o en una tabla en el archivo.
Actualmente estoy usando el siguiente código para reemplazar el texto.
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);
}
}
}
PROBLEMA: Cuando ejecuto este código, el archivo DOCX de salida reemplaza el texto por un espacio (es decir, "") en lugar de un salto de línea.
¿Cómo puedo cambiar este código para que esto funcione?
En lugar de agregar un salto de línea, intente hacer dos párrafos, uno antes del "texto que se va a reemplazar" y otro después. Hacer eso automáticamente agregará un salto de línea entre dos párrafos.
text.Parent.Append (new DocumentFormat.OpenXml.Wordprocessing.Break ());
// 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"));
}
}
Esto volverá:
Texto:
Texto:
Prueba con un descanso . Verifique el ejemplo en este enlace. Solo tienes que agregar un Break
Párrafos, etiquetas inteligentes, hipervínculos están todos dentro de Ejecutar . Entonces quizás puedas probar este enfoque . Para cambiar el texto dentro de una tabla, deberá usar este enfoque . De nuevo, el texto siempre está dentro de una Ejecución.
Si está diciendo que el reemplazo solo está reemplazando por una cadena vacía, probaría esto:
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());
}
}
}
}
}