documentformat c# ms-word openxml

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í.

  1. Crear un nuevo documento de office.
  2. Agregue las partes al documento que desea reproducir con OpenXML SDK.
  3. Abra el documento de office con la herramienta de productividad Microsoft OpenXML.
  4. Haga clic en "Reflejar Código"
  5. 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ó.