在字段中插入段落/换行符 - Microsoft Word

本文关键字:换行符 Microsoft Word 段落 字段 插入 | 更新日期: 2023-09-27 18:36:57

我正在尝试在表格单元格(字段)中插入换行符,请参阅"w:br/"。我该如何才能做到这一点?

我在文档中有一个包含表格的标签,其中包含单个表格单元格。我想在单元格内插入带有换行符的文本,而不是复制单元格。

var row = new XElement("Row");
string annetBeskrivelse = string.Empty;
foreach (var field in table.Elements("Field"))
{
  foreach (SPListItem item in listItemCollection)
  {
    try
    {
        var listColumnName = field.Attribute("Name").Value;
        SPField listField = list.Fields[listColumnName];
        annetBeskrivelse += listField.GetFieldValueAsText(item[listColumnName]);
        annetBeskrivelse += "<w:br />";
    }
    catch (ArgumentException)
    {
        LblErroMessage.Text =
            string.Format(
                "Invalid template document - refers to list column ({0}) that doesn't exist",
                field.Attribute("Name").Value);
    }
  }
  row.Add(new XElement("Field", field.Attribute("Name"),
    new XAttribute("Value", annetBeskrivelse)));
  table.Add(row);
}

我试过:

"<w:br />"
"'n"
new Paragraph();

在字段中插入段落/换行符 - Microsoft Word

我必须自己处理单词中的表格,所以为了方便自己,我为表格编写了一个名为 CustomTable 的包装器。在我的CustomTableCell中,我创建了以下属性来获取/设置内容(包括多行单元格):

public class CustomTableCell
{
   public TableCell Cell {get; private set;} //The open xml sdk TableCell class
   public string InnerText
   {
        get { return Cell.InnerText; }
        set
        {
            if (String.IsNullOrEmpty(value))
                return;
            Paragraph p = Cell.GetFirstChild<Paragraph>();
            if (p.ChildElements.Count > 1)
            {
                Run run = (Run)p.GetFirstChild<Run>().CloneNode(true);
                p.RemoveAllChildren<Run>();
                run.RemoveAllChildren<Text>();
                run.GetMultiLineRun(value);
                p.AppendChild(run);
            }
            else
            {
                Run run = p.GetFirstChild<Run>();
                if (run != null)
                    run.GetMultiLineRun(value);
                else
                {
                    run = new Run();
                    p.Append(run.GetMultiLineRun(value));
                }
            }
        }
    }
}

GetMultiLineRun方法:

public static class Extensions
{
    public static Run GetMultiLineRun(this Run run, string s)
    {
        string[] lines = 
           s.Split(new string[] { "'r'n", "'n" }, StringSplitOptions.RemoveEmptyEntries);
        if (lines.Length > 0)
        {
            //Don't add break after last line!
            foreach (string line in lines.Reverse().Skip(1).Reverse())
            {
                run.AppendChild(new Text(line));
                run.AppendChild(new Break());
            }
            run.AppendChild(new Text(lines.Last()));
        }
        return run;
    }
}
基本上,如果一个段落中只有一个运行,我会

更改它的内容,如果一个段落中有多个运行,我会复制第一个,编辑内容并删除其他内容。不过,我只需要完全替换单元格中的内容,所以如果你只想编辑现有内容,你需要稍微调整一下。

为这样的东西编写包装器非常方便,因为直接使用word中的表格是一场噩梦,无法维护。

Paragraph paragraph = new Paragraph();
string[] lines = Value.Split(new string[] { "'n" }, StringSplitOptions.RemoveEmptyEntries);
Run run = new Run(new Text(lines[0]));
if (lines.Length > 1)
{
  run.AppendChild(new Break());
  run.AppendChild(new Text(lines[1]));
}
paragraph.Append(run);

我有一个类似的问题。我最终保留了示例中的字符串变量 Value,以"'"作为换行符进入单元格。我在换行符上将字符串拆分为一个数组。我的代码中只有一个中断的可能性,但是如果您有多个换行符,您可以使用foreach进行循环访问。