2010-05-20 10 views
43

Sto usando openxml WordProcessingDocument per aprire un modello di Word e sostituire il segnaposto x1 con una stringa. Funziona bene a meno che non abbia bisogno che la stringa contenga una nuova riga. Come posso sostituire x1 con il testo potrebbe contenere righe nuove che la parola riconoscerebbe? Ho provato \ n \ r ma questi non funzionanoInserimento di newlines in Word utilizzando OpenXML

Giusto per spiegare ulteriormente quando viene aperto il modello di parole, l'ho letto in uno StreamReader, quindi uso. Sostituisci per sostituire x1.

+1

Non è impressionante, ma: '.Rimontare (Environment.NewLine, "")' potrebbe funzionare per voi. – BrainSlugs83

+0

@ BrainSlugs83: Qualche idea su questo? http://stackoverflow.com/questions/26307691 – slayernoah

risposta

68

Per inserire una nuova riga, è necessario aggiungere un'istanza Break allo Run.

Esempio:

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

L'XML prodotto sarà qualcosa del tipo:

<w:r> 
    <w:t>Hello</w:t> 
    <w:br/> 
    <w:t>world</w:t> 
</w:r> 
+0

Non penso di poter usare la tua risposta nella mia situazione. Ho aggiornato la mia domanda per spiegare ulteriormente – Danny

+0

Quindi stai lavorando direttamente con l'XML? In tal caso, prova ad inserire XML come nell'esempio. – codeape

+2

Sei riuscito a farlo funzionare? – codeape

17

Ecco un # funzione C che avrà una stringa, dividerlo in materia di interruzione di linea e renderla in OpenXML. Per utilizzare, creare un'istanza di Run e passarla nella funzione con una stringa.

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

niceeeee, grazie mille, io uso questa soluzione quando la mia stringa contiene \ n \ r – jiji2663

7

Ho lo stesso problema e nel mio caso <w:br /> tag lavorato.

+0

Ha funzionato come un fascino! Ti serbatoio molto! – BertuPG

7

Benche questa domanda è già risposto Ho un altro approccio per risolvere domande come:

Come posso fare XXX con OpenXML ??

In questi casi si potrebbe fare uso del potente Microsoft OpenXML strumento di produttività (noto anche come OpenXmlSdkTool). Download here.

  1. Creare un nuovo documento ufficio
  2. Aggiungere le parti, al documento che si desidera riprodurre con OpenXML SDK.
  3. Aprire il documento ufficio con Microsoft OpenXML strumento di produttività
  4. Fare clic su "Riflettere Codice"
  5. Sul lato destro si vedrà ora si documento rifletteva in codice C#.
+0

Questa è un'ottima risposta! Ero in procinto di elaborare alcuni bit xml aperti e difficili e ho dovuto google il funzionamento interno di quasi ogni elemento.Avere uno strumento che può produrre i bit del trucco e incollarli è un notevole risparmio di tempo, grazie. – dougajmcdonald