2015-04-24 82 views
0

我在寫一個基於模板生成Word文檔的庫。有些文本需要用另一個文本替換。一切似乎都奏效,有一個TextReplacer類可能會執行替換。如何使用OpenXMLPowerTools將換行符插入Word(docx)文檔?

當我需要用多行文本替換文本的單行部分時,情況會變得更糟。諸如\n\r\n的換行符只是作爲文本被粘貼。我知道這是預期的,因爲多行文本必須在document.xml中成爲單獨的標記(<w.p>..</w.p>,我想)。

我認爲這個簡單的解決方案是在保存前用斷開標記替換文檔中的所有\n\r\n。我可以用string.Replace()做到這一點,但我認爲這不是最好的選擇。如果可能的話,我想使用一些內置的OpenXMLPowerTools庫功能。或者也許還有其他(免費的)OpenXML庫。

+0

林不知道這是否有任何幫助http://stackoverflow.com/questions/2871887/inserting-newlines-in-word-using-openxml – NickOS

+0

@NickRobins,是的,它可能是解決方案,但不是一個建在功能。我可能會用手執行替換,我只是擔心它會隨着大量文本而下降。 –

回答

2

我結束了與此:

public static void ReplaceNewLinesWithBreaks(XDocument xDoc) 
{ 
    var textWithBreaks = xDoc.Descendants(W.t).Where(t => t.Value.Contains("\\r\\n")); 
    foreach (var textWithBreak in textWithBreaks) 
    { 
     var text = textWithBreak.Value; 
     var split = text.Replace("\\r\\n", "\\n").Split(new[] {"\\n"}, StringSplitOptions.None); 

     textWithBreak.Value = string.Empty; 
     foreach (var s in split) 
     { 
      textWithBreak.Add(new XElement(W.t, s)); 
      textWithBreak.Add(new XElement(W.br)); 
     } 
     textWithBreak.Descendants(W.br).Last().Remove(); 
    } 
} 

這也可以被改寫爲輔助方法。

但是,如果OpenXmlPowerTools團隊的某個人將向TextReplacer寫入一個重載,該重載將接受IEnumerables進行替換,那將會很好。