如何使用 OpenXMLPowerTools 将换行符插入到 Word (docx) 文档中?
How to insert line break into Word (docx) document using OpenXMLPowerTools?
我正在编写一个基于模板生成 Word 文档的库。一些文本需要用另一个文本替换。一切似乎都正常,有一个 TextReplacer
class 可以执行替换。
当我需要用多行文本替换文本的单行部分时,情况变得更糟。 \n
或 \r\n
等换行符只是作为文本粘贴。我知道这是预期的,因为多行文本必须在 document.xml.
中成为单独的标签(<w.p>..</w.p>
,我想)
我认为简单的解决方案是在保存之前用中断标记替换文档中的所有 \n
或 \r\n
。我可以用 string.Replace()
来做到这一点,但我认为这不是最好的方法。如果可能的话,我想使用一些内置的 OpenXMLPowerTools 库功能。或者其他(免费)OpenXML 库。
我最终得到了这个:
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 进行替换,那就太好了。
我正在编写一个基于模板生成 Word 文档的库。一些文本需要用另一个文本替换。一切似乎都正常,有一个 TextReplacer
class 可以执行替换。
当我需要用多行文本替换文本的单行部分时,情况变得更糟。 \n
或 \r\n
等换行符只是作为文本粘贴。我知道这是预期的,因为多行文本必须在 document.xml.
<w.p>..</w.p>
,我想)
我认为简单的解决方案是在保存之前用中断标记替换文档中的所有 \n
或 \r\n
。我可以用 string.Replace()
来做到这一点,但我认为这不是最好的方法。如果可能的话,我想使用一些内置的 OpenXMLPowerTools 库功能。或者其他(免费)OpenXML 库。
我最终得到了这个:
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 进行替换,那就太好了。