c# - documentformat - Insertando nuevas líneas en Word usando OpenXML
documentformat openxml (4)
Estoy usando openxml WordProcessingDocument para abrir una plantilla de Word y reemplazar el marcador de posición x1 con una cadena. Esto funciona bien a menos que necesite que la cadena contenga una nueva línea. ¿Cómo puedo reemplazar x1 con texto que puede contener nuevas líneas que la palabra reconocería? He intentado / n / r pero estos no funcionan
Solo para explicar más cuando se abre la plantilla de palabras, la leo en un StreamReader y luego uso .Replace para reemplazar x1.
Aquí hay una función de C # que tomará una cadena, la dividirá en saltos de línea y la procesará en OpenXML. Para usar, cree una Ejecución y pásela a la función con una cadena.
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 );
}
Aunque esta pregunta ya está respondida, tengo otro enfoque para resolver preguntas como:
¿Cómo puedo hacer XXX con OpenXML?
En estos casos, podría hacer uso de la potente herramienta de productividad Microsoft OpenXML (también conocida como OpenXmlSdkTool ). Descarga aquí.
- Crear un nuevo documento de office.
- Agregue las partes al documento que desea reproducir con OpenXML SDK.
- Abra el documento de office con la herramienta de productividad Microsoft OpenXML.
- Haga clic en "Reflejar Código"
- En el lado derecho verá que ahora el documento se refleja en el código C #.
Para insertar nuevas líneas, debe agregar una instancia de Break
a la Run
.
Ejemplo:
run.AppendChild(new Text("Hello"));
run.AppendChild(new Break());
run.AppendChild(new Text("world"));
El XML producido será algo así como:
<w:r>
<w:t>Hello</w:t>
<w:br/>
<w:t>world</w:t>
</w:r>
Tengo el mismo problema y en mi caso, la etiqueta <w:br />
funcionó.