68 votes

Insertion de nouvelles lignes dans Word à l'aide d'OpenXML

J'utilise openxml WordProcessingDocument pour ouvrir un modèle Word et remplacer l'espace réservé x1 par une chaîne. Cela fonctionne très bien sauf si j'ai besoin que la chaîne contienne une nouvelle ligne. Comment puis-je remplacer x1 par du texte pouvant contenir des nouvelles lignes que le mot reconnaîtrait? J'ai essayé \ n \ r mais ça ne marche pas

Juste pour expliquer plus avant quand le mot modèle est ouvert, je l'ai lu dans un StreamReader, puis utilisez .Replace pour remplacer x1.

110voto

codeape Points 38576

Pour insérer des nouvelles lignes, je pense que vous devez ajouter une instance Break au Run .

Exemple:

 run.AppendChild(new Text("Hello"));
run.AppendChild(new Break());
run.AppendChild(new Text("world"));
 

Le XML produit sera quelque chose comme:

 <w:r>
  <w:t>Hello</w:t>
  <w:br/>
  <w:t>world</wt>
</w:r>
 

30voto

Toolsmythe Points 81

Voici une fonction C # qui prend une chaîne, la scinde en sauts de ligne et la restitue en OpenXML. Pour l'utiliser, instanciez une exécution et transmettez-la à la fonction avec une chaîne.

 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 );
    }
 

12voto

parm Points 41

J'ai le même problème et dans mon cas, les balises <w:br /> fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X