2015-04-24 153 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进行替换,那将会很好。