我试图将换行符插入表格单元格(字段),请参阅" 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();
答案 0 :(得分:0)
我不得不自己处理表格,所以为了让自己更容易,我写了一个名为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;
}
}
基本上如果段落中只有一个运行,我会更改它的内容,如果段落中有多个运行,我会复制第一个,编辑内容并删除其他内容。我只需要完全替换单元格中的内容,因此如果您只想编辑现有内容,则需要对其进行一些调整。
为这样的东西编写包装器非常方便,因为直接使用单词表是一场噩梦,无法维护。
答案 1 :(得分:0)
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,进入单元格&#34; \ n&#34;作为换行符。我将字符串拆分为换行符中的数组。我的代码中只有一次中断的可能性,但如果你有多个换行符,你可以使用foreach循环。