目前,邮件合并过程中没有这样的功能,但是你可以做的是在整个表上进行合并范围,然后在执行邮件合并后将结果表合并为一个。
例如,假设这是您的文档:
我还将此表的标题属性设置为“详细信息”(表属性 -> 替代文本 -> 标题),以便我可以轻松选择它们。
var document = DocumentModel.Load("template.docx");
// Sample source.
var source = new
{
Details = new[]
{
new { Detail1 = "First", Detail2 = "1", Detail3 = "11", Detail4 = "111" },
new { Detail1 = "Second", Detail2 = "2", Detail3 = "22", Detail4 = "222" },
new { Detail1 = "Third", Detail2 = "3", Detail3 = "33", Detail4 = "333" },
}
};
document.MailMerge.Execute(source);
// Retrieve tables with "Details" title.
var detailsTables = document.GetChildElements(true, ElementType.Table)
.Cast<Table>()
.Where(t => t.Metadata.Title == "Details")
.ToList();
// Copy cells from other "Details" tables into the first "Details" table.
var firstTable = detailsTables[0];
for (int i = 1; i < detailsTables.Count; i++)
{
var otherTable = detailsTables[i];
for (int r = 0; r < otherTable.Rows.Count; r++)
firstTable.Rows[r].Cells.Add(
otherTable.Rows[r].Cells[0].Clone(true));
otherTable.Content.Delete();
}
document.Save("output.docx");
结果是这样的:
此外,您可以在合并范围周围使用书签,然后使用以下内容检索表,而不是使用 Title 属性来标识目标表:
var detailsTables = bookmark.GetContent(true).GetChildElements(ElementType.Table)
.Cast<Table>();
最后,如果您需要标题列之类的东西,您可以将其作为单独的表格添加到合并范围之前。换句话说,是这样的: