我正在编写一个基于模板生成Word文档的库。有些文本需要用另一个文本替换。一切似乎都在起作用,有一个TextReplacer
类可以执行替换。
当我需要用多行文本替换单行部分文本时,事情变得更糟。 \n
或\r\n
等换行符仅作为文字粘贴。我理解这是预期的,因为多行文本必须成为document.xml中的单独标记(我认为<w.p>..</w.p>
)。
我认为这个简单的解决方案是在保存之前用break标记替换文档中的所有\n
或\r\n
。我可以用string.Replace()
做到这一点,但我不认为这是最好的方法。我想使用一些内置的OpenXMLPowerTools库功能,如果可能的话。或者其他(免费)OpenXML库。
答案 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进行替换的重载,那就太棒了。