如何使用OpenXMLPowerTools将换行符插入Word(docx)文档?

时间:2015-04-24 06:07:09

标签: c# .net openxml docx openxml-sdk

我正在编写一个基于模板生成Word文档的库。有些文本需要用另一个文本替换。一切似乎都在起作用,有一个TextReplacer类可以执行替换。

当我需要用多行文本替换单行部分文本时,事情变得更糟。 \n\r\n等换行符仅作为文字粘贴。我理解这是预期的,因为多行文本必须成为document.xml中的单独标记(我认为<w.p>..</w.p>)。

我认为这个简单的解决方案是在保存之前用break标记替换文档中的所有\n\r\n。我可以用string.Replace()做到这一点,但我不认为这是最好的方法。我想使用一些内置的OpenXMLPowerTools库功能,如果可能的话。或者其他(免费)OpenXML库。

1 个答案:

答案 0 :(得分: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进行替换的重载,那就太棒了。